Voor een Drupal module heb ik wat code geschreven. Werkt verder prima, alleen snap ik de werking van de 'ternary' operator niet helemaal.
Voor de functie return ik een value, die kijkt of veld X bestaat en die waarde dan terug geeft. Alleen geeft PHP mij een foutmelding die ik niet helemaal snap, aangezien ik dacht dat deze operator niet verder kijkt dan z'n neus lang is, nadat 't een expression heeft gevonden die 'true' returned. Blijkbaar gebeurd dat niet.
De foutmelding is deze:
Notice: Undefined property: stdClass::$content in get_deposit_from_node()
Deze code wilde ik in eerste instantie gebruiken. Detail is hier dan $node->product_deposit bestaat en ook een waarde heeft, maar blijkbaar wil PHP in de 'ternary' operator toch kijken of andere waardes ook geldig zijn. Blijkbaar zit er ook een fout in m'n gedachte dat ik 'isset' kan gebruiken op een veld in een array, maar daar kan ik later nog naar kijken.
Deze code werkt wel.Ik dacht alleen dat mijn ternary operator (bovenstaand) hetzelfde deed, maar blijkbaar niet helemaal.
Doel van topic: kan iemand m'n uitleggen waarom het niet werkt zoals ik verwacht? De logica die ik had verwacht is
note: heb niet echt een PHP achtergrond.
edit: http://us2.php.net/manual...rators.comparison.ternary blijkbaar werkt PHP op deze manier.
/opgelost.
Voor de functie return ik een value, die kijkt of veld X bestaat en die waarde dan terug geeft. Alleen geeft PHP mij een foutmelding die ik niet helemaal snap, aangezien ik dacht dat deze operator niet verder kijkt dan z'n neus lang is, nadat 't een expression heeft gevonden die 'true' returned. Blijkbaar gebeurd dat niet.
De foutmelding is deze:
Notice: Undefined property: stdClass::$content in get_deposit_from_node()
Deze code wilde ik in eerste instantie gebruiken. Detail is hier dan $node->product_deposit bestaat en ook een waarde heeft, maar blijkbaar wil PHP in de 'ternary' operator toch kijken of andere waardes ook geldig zijn. Blijkbaar zit er ook een fout in m'n gedachte dat ik 'isset' kan gebruiken op een veld in een array, maar daar kan ik later nog naar kijken.
code:
1
2
| return isset($node->product_deposit) ? $node->product_deposit : ($node->content != null && isset($node->content['product_deposit'])) ? $node->content['product_deposit'] : UC_PRODUCT_DEPOSIT_DEFAULT_AMOUNT; } |
Deze code werkt wel.Ik dacht alleen dat mijn ternary operator (bovenstaand) hetzelfde deed, maar blijkbaar niet helemaal.
code:
1
2
3
4
5
6
7
8
9
10
11
| // Does $node->product_deposit exist?
$deposit_amount = isset($node->product_deposit) ? $node->product_deposit : NULL;
// Check if 'node->[content]' exists.
if ($deposit_amount == NULL && isset($node->content))
$deposit_amount = isset($node->content['product_deposit']) ? $node->content['product_deposit'] : NULL;
if ($deposit_amount == NULL)
return UC_PRODUCT_DEPOSIT_DEFAULT_AMOUNT ;
else
return $deposit_amount; |
Doel van topic: kan iemand m'n uitleggen waarom het niet werkt zoals ik verwacht? De logica die ik had verwacht is
code:
1
| isset($node->product_deposit) ? $node->product_deposit : 'aangezien isset($node->product_deposit) true oplevert boeit het niet meer wat er verder gebeurt.) |
note: heb niet echt een PHP achtergrond.
edit: http://us2.php.net/manual...rators.comparison.ternary blijkbaar werkt PHP op deze manier.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| Example #3 Non-obvious Ternary Behaviour <?php // on first glance, the following appears to output 'true' echo (true?'true':false?'t':'f'); // however, the actual output of the above is 't' // this is because ternary expressions are evaluated from left to right // the following is a more obvious version of the same code as above echo ((true ? 'true' : false) ? 't' : 'f'); // here, you can see that the first expression is evaluated to 'true', which // in turn evaluates to (bool)true, thus returning the true branch of the // second ternary expression. ?> |
/opgelost.
[ Voor 14% gewijzigd door mrFoce op 28-07-2012 13:42 ]