if functie

Gestart doorTom27 reacties173 weergaven

28 berichten · pagina 1 van 2

Tom

Lid · Topicstarter

Berichten
3.868
Reputatie
0
Punten
0,02
Lid sinds
Laatst gezien
Hallo,

Kan iemand mij uitleggen wat de PHP functie if is als je het helemaal uitschrijft?

Wat is bedoel:

Codeblok (voorbeeld.php):

1
2
3
4
5


function voorbeeld(){
echoVoorbeeld;
}

?>

Maar dan voor if, dus:

Codeblok (voorbeeld.php):

1
2
3
4
5


function if(){
//Wat moet hier?
}
?>
0
Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
function if() kan niet

ofnaja het kan wel maar je overschijft een belangerijke functie
0
Berichten
1.871
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Ik denk dat hij bedoeld hoe die functie gemaakt is, wat de betekenis is van de huidige functie if?
0
Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Oh, volgens mij c, perl of python
0
Tom

Lid · Topicstarter

Berichten
3.868
Reputatie
0
Punten
0,02
Lid sinds
Laatst gezien
Nee, ik bedoel de code, wat if, if maakt als het ware.
0
Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Tom schreef:
Nee, ik bedoel de code, wat if, if maakt als het ware.
Dylanh schreef:
Oh, volgens mij c, perl of python
0
Tom

Lid · Topicstarter

Berichten
3.868
Reputatie
0
Punten
0,02
Lid sinds
Laatst gezien
Maar hoe werkt dat dan samen in PHP?
0
Berichten
18.482
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
if kan verschillende dingen doen voor zover ik weet. Als je

if($valueA == $valueB)


doet wordt er gekeken of de parameters dezelfde waarde hebben. Doe je echter

if($valueA === $valueB)


dan wordt er gekeken of de parameters dezelfde waarde hebben en van hetzelfde datatype zijn.
Als je

if($isThisDefined)


doet dan wordt er gekeken of de waarde bestaat (geen goede manier om dit te doen, als je het mij vraagt)
Wanneer je

if($booleanValue)


doet dan wordt er gekeken of de waarde true is.
Al deze if-statements kun je dan ook weer doen met een ! er in om te kijken of de voorwaarde niet waar is.
Hoe dit allemaal precies werkt weet ik niet en ik durf ook niet te zeggen in welke taal het precies geschreven is
0
Tom

Lid · Topicstarter

Berichten
3.868
Reputatie
0
Punten
0,02
Lid sinds
Laatst gezien
Ik weet wat het kan doen, maar ik wil weten hoe de functie in c, perl of python is opgebouwt.
0
Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Tom schreef:
Maar hoe werkt dat dan samen in PHP?
Ja hier ben ik ook erg benieud naar, maar dan wel met meerde functies.
0
Stef

Lid

Berichten
10.150
Reputatie
2
Punten
0,00
Lid sinds
Laatst gezien
Luukvdo schreef:
if kan verschillende dingen doen voor zover ik weet. Als je

if($valueA == $valueB)
doet wordt er gekeken of de parameters dezelfde waarde hebben. Doe je echter

if($valueA === $valueB)


dan wordt er gekeken of de parameters dezelfde waarde hebben en van hetzelfde datatype zijn.
Als je

if($isThisDefined)


doet dan wordt er gekeken of de waarde bestaat (geen goede manier om dit te doen, als je het mij vraagt)
Wanneer je

if($booleanValue)


doet dan wordt er gekeken of de waarde true is.
Al deze if-statements kun je dan ook weer doen met een ! er in om te kijken of de voorwaarde niet waar is.
Hoe dit allemaal precies werkt weet ik niet en ik durf ook niet te zeggen in welke taal het precies geschreven is

Doet die 3e niet hetzelfde als if isset?
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
Stefvdwel schreef:
Eerdere citaten tonen
Luukvdo schreef:
if kan verschillende dingen doen voor zover ik weet. Als je
if($valueA == $valueB)


doet wordt er gekeken of de parameters dezelfde waarde hebben. Doe je echter

if($valueA === $valueB)


dan wordt er gekeken of de parameters dezelfde waarde hebben en van hetzelfde datatype zijn.
Als je

if($isThisDefined)


doet dan wordt er gekeken of de waarde bestaat (geen goede manier om dit te doen, als je het mij vraagt)
Wanneer je

if($booleanValue)


doet dan wordt er gekeken of de waarde true is.
Al deze if-statements kun je dan ook weer doen met een ! er in om te kijken of de voorwaarde niet waar is.
Hoe dit allemaal precies werkt weet ik niet en ik durf ook niet te zeggen in welke taal het precies geschreven is
Doet die 3e niet hetzelfde als if isset?

nee, hij kijkt bij die if dan of de waarde true is.
Als $isThisDefined false is dan geeft if($isThisDefined) ook false, maar if(isset($isThisDefined)) zou dan true geven omdat ie immers wel bestaat.

toevoeging op 28 juni 2014, 211304:
Tom schreef:
Ik weet wat het kan doen, maar ik wil weten hoe de functie in c, perl of python is opgebouwt.
Een heleboel functies zijn gewoon wrappers naar dezelfde functie in C, maar dan met wat extra checks enzo.

Stel dat je met PHP een taal zou maken die deze code zou accepteren:

als {%a == %b}
[
    
    echo ja;
    
]
else
[

    echo nee;
    
]
dan zorg je dat die functie wordt doorgegeven aan je functie parse_als() ofzo (wat je met reguliere expressies ofzo kan doen), en die functie parse_als() bouw je dan zo op:

[COLOR= #0000BB]<?php[/COLOR]
[COLOR= #007700]function[/COLOR] parse_als[COLOR= #007700]([/COLOR][COLOR= #0000BB]$voorwaarde[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #0000BB]$if[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #0000BB]$else[/COLOR][COLOR= #007700])
{[/COLOR]

    [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/exec"]exec[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$voorwaarde[/COLOR][COLOR= #007700]))
    {[/COLOR]
    
        [URL="http://www.php.net/exec"]exec[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$if[/COLOR][COLOR= #007700]);
        
    }[/COLOR]
    [URL="http://www.php.net/else"]else[/URL]
    [COLOR= #007700]{[/COLOR]
        
        [URL="http://www.php.net/exec"]exec[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$else[/COLOR][COLOR= #007700]);
        
    }

}[/COLOR]


en die functie wordt dan door je parser zo aangeroepen:

[COLOR= #0000BB]<?php[/COLOR]
parse_als[COLOR= #007700]([/COLOR][COLOR= #DD0000]$a == $b[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #DD0000]"echo ja;"[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #DD0000]"echo nee;"[/COLOR][COLOR= #007700]);[/COLOR]


en dat kun je dan zo uitgebreid maken als je zelf wil, maar de logica achter die functies hoef je dan niet allemaal nog eens te maken.
iets als substr() gebruikt gewoon de substr() van C of waar PHP dan ook in geschreven is.

toevoeging op 28 juni 2014, 21:36:42:
http://lxr.php.net/search
Daar kun je de source van PHP functies vinden. smile
Zoek maar eens op
PHP_FUNCTION explode

dan krijg je deze broncode:

/* {{{ proto array explode(string separator, string str [, int limit])
   Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned. */
PHP_FUNCTION(explode)
{
    char *str, *delim;
    int str_len = 0, delim_len = 0;
    long limit = LONG_MAX; /* No limit */
    zval zdelim, zstr;
    
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", &delim, &delim_len, &str, &str_len, &limit) == FAILURE) {
        return;
    }
    
    if (delim_len == 0) {
        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty delimiter");
        RETURN_FALSE;
    }

    array_init(return_value);

    if (str_len == 0) {
          if (limit >= 0) {
            add_next_index_stringl(return_value, "", sizeof("") - 1, 1);
        } 
        return;
    }

    ZVAL_STRINGL(&zstr, str, str_len, 0);
    ZVAL_STRINGL(&zdelim, delim, delim_len, 0);
    if (limit > 1) {
        php_explode(&zdelim, &zstr, return_value, limit);
    } else if (limit < 0) {
        php_explode_negative_limit(&zdelim, &zstr, return_value, limit);
    } else {
        add_index_stringl(return_value, 0, str, str_len, 1);
    }
}
/* }}} */


Als je dan wat doorklikt en doorzoekt kun je denk wel de echte logica achter de functie vinden.

toevoeging op 28 juni 2014, 21:38:14:
oh hierzo, de source van php_explode:

/* {{{ php_explode
 */
PHPAPI void php_explode(zval *delim, zval *str, zval *return_value, long limit) 
{
    char *p1, *p2, *endp;

    endp = Z_STRVAL_P(str) + Z_STRLEN_P(str);

    p1 = Z_STRVAL_P(str);
    p2 = php_memnstr(Z_STRVAL_P(str), Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp);

    if (p2 == NULL) {
        add_next_index_stringl(return_value, p1, Z_STRLEN_P(str), 1);
    } else {
        do {
            add_next_index_stringl(return_value, p1, p2 - p1, 1);
            p1 = p2 + Z_STRLEN_P(delim);
        } while ((p2 = php_memnstr(p1, Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp)) != NULL &&
                 --limit > 1);

        if (p1 <= endp)
            add_next_index_stringl(return_value, p1, endp-p1, 1);
    }
}
/* }}} */


toevoeging op 28 juni 2014, 21:38:46:
ik weet alleen niet waar de code van de if te vinden is emo
0
Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Wat zit er dan achter if() in C
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren