Mindre typesvaghed i PHP

Tags:    php

PHP er meget typesvagt. Derfor findes der operatoren ==, som tjekker om de har samme værdi, og === som tjekker om de har samme type og samme værdi.

(5 == '5') gir true
(5 === '5') gir false

Hvad kan man gøre for at gøre PHP mindre typesvagt? Findes der opdateringer, reserverede ord eller scripts, der kan gøre PHP mindre typesvagt?



For at sige det kort, så findes der, af hvad jeg har hørt om og ved, ikke nogen måde du kan mindske PHPs typesvaghed, udover at bruge === og !== som du selv skriver. Dette er et rigtig godt punkt som du har fat i her, og jeg vil fluks tilføje det under FAQ'en :).



What?

Et script-sprog som er typesvagt?

Dumme mig.
Jeg har i mange år gået rundt og troet at script-sprog pr. definition er typesvage, og at det netop er en af kvaliteterne ved scripts.

Godt vi fik den store sandhed på plads :D



Jeg har i mange år gået rundt og troet at script-sprog pr. definition er typesvage, og at det netop er en af kvaliteterne ved scripts.


Men jeg er nået frem til at det ikke er en fordel for mig.



Så vælg selv mellem Jsp og Aspx :)

PHP er et script-sprog.



Ja eller vælg at køre C++ og cgi. Så har du sgu et sprog der ikke er typesvagt.



http://www.udvikleren.dk/Faq.aspx?tech=6&show=44 - så er punktet kommet ind i FAQ'en, håber at det kan hjælpe.



...sgu...


Du har tydeligvis ikke læst artiklerne om netetik.



@Kaare

Fra fag:


//nu vil $pos indeholde integer 0 derfor vil $pos == false være lig med true, vi er derfor nødt til at sammenligne med ===


Det er jo forkert, da $pos == false ikke er lig med true.
Det går ud på at du ikke kan finde ud af om det er den første karakter i teksten du har fundet. '$pos == false' er lig med '$pos == 0', og '$pos === false' er ikke lig med '$pos == 0'. Men 'false' vil på intet tidspunkt være 'true'



@Kaare

Fra fag:


//nu vil $pos indeholde integer 0 derfor vil $pos == false være lig med true, vi er derfor nødt til at sammenligne med ===


Det er jo forkert, da $pos == false ikke er lig med true.
Det går ud på at du ikke kan finde ud af om det er den første karakter i teksten du har fundet. '$pos == false' er lig med '$pos == 0', og '$pos === false' er ikke lig med '$pos == 0'. Men 'false' vil på intet tidspunkt være 'true'


Jeg tror han mente at udtrykket ($pos == false) ville give true.
Problemet er at med '==' er udtrykket '0 == false' sandt (true), mens det man måske gerne vil teste er for den specifikke type boolean med værdien false i udtrykkets første element.
Til det bruges '===', og her giver udtrykket '0 === false' ikke true.

Jeg ser ikke helt problemet her ;)



Jeg tror jeg ser din pointe.

FAQ'en burde skrives om, den giver det forkerte indtryk.



t