Discussion:
PHP
(too old to reply)
Eino Tuominen
2012-04-11 08:08:44 UTC
Permalink
Osuipa tuossa silmiin kollegan vinkkaama sivu, jolla on PHP:n
olemus kattavasti kiteytettynä.

http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/

Muutama helmi niille, joiden kärsivällisyys ei riitä kahlaamiseen:

1. Kaunista koodia

PHP:ssä oli integer overflow -haavoittuvuus, joka nerokkaasti
korjattiin tämmöisellä koodilla:

int size;

size = EXPR;

if (size > INT_MAX || size <= 0) {
return NULL;
}

Toki tuo myöhemmin korjattiin laskemaan koko käyttäen,
köh, floatia.

2. Easter Egg

Jokainen ajettava PHP-prosessi sisältää 21 kB:n kokoisen
PHP-logon, jonka saa näkyviin nerokkaalla tavalla, eli
lisäämällä '?=PHPE9568F34-D428-11d2-A769-00AA001ACF42'
skriptin loppuun.

http://en.wikipedia.org/w/index.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42

3. NULL

"Incrementing (++) a NULL produces 1. Decrementing (--) a NULL
produces NULL."
--
Eino Tuominen
Pertti Heikkinen
2012-04-11 13:10:21 UTC
Permalink
Post by Eino Tuominen
2. Easter Egg
Jokainen ajettava PHP-prosessi sisältää 21 kB:n kokoisen
PHP-logon, jonka saa näkyviin nerokkaalla tavalla, eli
lisäämällä '?=PHPE9568F34-D428-11d2-A769-00AA001ACF42'
skriptin loppuun.
Ja?
Post by Eino Tuominen
3. NULL
"Incrementing (++) a NULL produces 1. Decrementing (--) a NULL
produces NULL."
Tuohan toimii järkevästi. Voipi olla, että cyberteorian mukaan väärin,
mutta ohjelmoijan kannalta järkevästi.

#include <stdio.h>
int main(void) {
void *P = NULL, *R = NULL;
printf("%p %p\n",++P,--R);
return 0;
}

[***@crafty ~]$ gcc -Wall -o koe koe.c
[***@crafty ~]$ ./koe
0x1 0xffffffff

PHP:n tapa on fiksumpi.
Jussi Hagman
2012-05-03 14:00:36 UTC
Permalink
Einon linkittämä artikkeli on erinomainen, jo otsikkokin kertoo PHP:sta
juurikin kaiken mitä tarvitsee tietää.
Post by Pertti Heikkinen
Post by Eino Tuominen
3. NULL
"Incrementing (++) a NULL produces 1. Decrementing (--) a NULL
produces NULL."
Tuohan toimii järkevästi. Voipi olla, että cyberteorian mukaan väärin,
mutta ohjelmoijan kannalta järkevästi.
Voisitko selittää mitä järkevää on siinä, että NULL, eli asettamaton
arvo, toimii eri tavalla operaatioilla jotka vaikuttavat päälisin puolin
analogisilta? Ei sillä että PHP olisi muutenkaan mitenkään säännöllinen
tai looginen, kuten artikkelikin osoittaa.

NULL:n käyttö aritmetiikassa pitäisi olla aina virhe. Mutta kielen
filosofia tuntuu muutenkin olevan "joku tulos keinolla millä hyvänsä,
riippumatta oikeellisuudesta". Samaa kamaa ovat PHP:n älyttömät
automaattikonversiot tyypistä toiseen, joten järkevä toiminta ei varmaan
kävisi laatuun.

Esimerkkisi C:lla ja pointtereilla ei oikein osu, koska PHP:ssa ei
pointtereita ole ja NULL on kielissä ihan eri eläin.
--
Jussi Hagman, jhagman ÄT infa.fi
Pertti Heikkinen
2012-05-03 15:17:00 UTC
Permalink
Post by Jussi Hagman
Einon linkittämä artikkeli on erinomainen, jo otsikkokin kertoo PHP:sta
juurikin kaiken mitä tarvitsee tietää.
EVO-vastaus.
Post by Jussi Hagman
Voisitko selittää mitä järkevää on siinä, että NULL, eli asettamaton
arvo, toimii eri tavalla operaatioilla jotka vaikuttavat päälisin puolin
analogisilta? Ei sillä että PHP olisi muutenkaan mitenkään säännöllinen
tai looginen, kuten artikkelikin osoittaa.
Pöksyissäs on "asettamaton arvo". NULL on pointteri.
Post by Jussi Hagman
Esimerkkisi C:lla ja pointtereilla ei oikein osu, koska PHP:ssa ei
pointtereita ole
Täh???
Jussi Hagman
2012-05-04 13:15:27 UTC
Permalink
Post by Pertti Heikkinen
Post by Jussi Hagman
Voisitko selittää mitä järkevää on siinä, että NULL, eli asettamaton
arvo, toimii eri tavalla operaatioilla jotka vaikuttavat päälisin puolin
analogisilta? Ei sillä että PHP olisi muutenkaan mitenkään säännöllinen
tai looginen, kuten artikkelikin osoittaa.
Pöksyissäs on "asettamaton arvo". NULL on pointteri.
http://php.net/manual/en/language.types.null.php
Post by Pertti Heikkinen
Post by Jussi Hagman
Esimerkkisi C:lla ja pointtereilla ei oikein osu, koska PHP:ssa ei
pointtereita ole
Täh???
Kannattaisko edes päälisin puolin tietää jotain kielestä josta puhutaan?
--
Jussi Hagman, jhagman ÄT infa.fi
Pertti Heikkinen
2012-05-07 08:27:09 UTC
Permalink
Post by Jussi Hagman
Kannattaisko edes päälisin puolin tietää jotain kielestä josta puhutaan?
Ehdottomasti! Palataanpa asiaan sitten kun tiedät.
Pertti Heikkinen
2012-05-07 08:29:44 UTC
Permalink
Jos kielissä, joissa on "oikea" pointteri, se on määritelty arvoksi jota
ei ole, ei niissä myöskään voi olla pointteriaritmetiikkaa.

Niin ollen sitä, että PHP:ssa ei ole pointteriaritmetiikkaa, ei voida
mitenkään pitää näyttönä siitä, että PHP:ssa ei ole pointtereita.

Case closed, minun osaltani.
Ari Saastamoinen
2012-05-07 09:22:09 UTC
Permalink
Jos kielissä, joissa on "oikea" pointteri, se on määritelty arvoksi
jota ei ole, ei niissä myöskään voi olla pointteriaritmetiikkaa.
Ei NULL:lla ja pointtereilla ole mitään muuta tekemistä toistensa
kanssa kuin se, että C:ssä on #define NULL ((void*)0). NULL
tarkoittaa lähes joka paikassa arvoa jota ei ole määritelty ja
C:ssäkin tuota yleensä käytetään pointtereiden yhteydessä tuon
kaltaisesti, koska isossa osassa laitteistoa muistipaikkaan nolla ei
voi laittaa omaa dataa, vaan siellä on resettivektoreita tms.
Niin ollen sitä, että PHP:ssa ei ole pointteriaritmetiikkaa, ei
voida mitenkään pitää näyttönä siitä, että PHP:ssa ei ole
pointtereita.
Kerropas miten PHP:ssa pointtereita käytetään? Ei mitenkään, joten
siinä ei pointtereita ole.
Case closed, minun osaltani.
Vaikket asiasta haluakaan enää keskustella, niin ei se PHP:hen silti
pointtereita tuo ;)
--
Arzka oh3mqu+***@hyper.fi - En halua follareita mailina
1. Valitse sopiva paikka, ei ihmisten tai rakennusten lahella, jossa
paukku voi aiheuttaa hairiota. - Iso-Kiinalaisen kayttoohje
Jussi Hagman
2012-05-08 11:22:11 UTC
Permalink
Post by Pertti Heikkinen
Post by Jussi Hagman
Kannattaisko edes päälisin puolin tietää jotain kielestä josta puhutaan?
Ehdottomasti! Palataanpa asiaan sitten kun tiedät.
Kuten linkkini osoitti, tarkoittaa Null juurikin sitä mitä sanoin.

Onko nyt oikeasti niin vaikeaa todeta että olit väärässä että on pakko
alkaa (taas) lapselliseen pelleilyyn?
--
Jussi Hagman, jhagman ÄT infa.fi
Ari Saastamoinen
2012-05-04 23:53:54 UTC
Permalink
Pöksyissäs on "asettamaton arvo". NULL on pointteri.
C:ssä ei ole oikeasti olemassa NULL:ia, mutta NULL on definoitu siten,
että se on muistipaikkaan nolla osoittava pointteri, mutta kielissä,
joissa NULL ihan oikeasti on olemassa, niin se tarkoittaa arvoa, jota
ei ole, mutta se ei kuitenkaan ole sama asia kuin nolla. Ja PHP:ssa
NULL on olemassa (koska sen aritmetiikka toimii eri tavalla kuin
nollan aritmetiikka)
Post by Jussi Hagman
Esimerkkisi C:lla ja pointtereilla ei oikein osu, koska PHP:ssa ei
pointtereita ole
Täh???
Ei ole. Referenssejä on, mutta ne eivät ole pointtereita, koska et
niille voi sanoa esim. $ptr++; (Tai voit, mutta se ei todellakaan tee
samaa kuin mitä tapahtuisi pointteriaritmetiikassa)
--
Arzka oh3mqu+***@hyper.fi - En halua follareita mailina
1. Valitse sopiva paikka, ei ihmisten tai rakennusten lahella, jossa
paukku voi aiheuttaa hairiota. - Iso-Kiinalaisen kayttoohje
Loading...