Que veut dire ce code? Est-ce ainsi que vous déclarez un pointeur en php?
$this->entryId = $entryId;
Noms des variables dans PHP commence par $ donc $ entryId est le nom d'une variable. $ C'est une variable spéciale dans la programmation orientée objet en PHP, qui fait référence à l'objet courant. -> est utilisé pour accéder à un membre d'objet (comme les propriétés ou les méthodes) en PHP, comme la syntaxe en C++. Votre code signifie donc ceci:
Placez la valeur de la variable $ entryId dans le champ (ou la propriété) entryId de cet objet.
L'opérateur & en PHP, signifie passer la référence. Voici un exemple:
$b=2;
$a=$b;
$a=3;
print $a;
print $b;
// output is 32
$b=2;
$a=&$b; // note the & operator
$a=3;
print $a;
print $b;
// output is 33
Dans le code ci-dessus, parce que nous avons utilisé l'opérateur &, une référence à l'endroit où pointe $ b est stockée dans $ a. Donc $ a est en fait une référence à $ b.
En PHP, les arguments sont passés par valeur par défaut (inspiré par C). Ainsi, lors de l'appel d'une fonction, lorsque vous transmettez vos valeurs, elles sont copiées par valeur et non par référence. C'est la valeur par défaut DANS LA PLUPART DES SITUATIONS. Cependant, il existe un moyen de passer par un comportement de référence lors de la définition d'une fonction. Exemple:
function plus_by_reference( &$param ) {
// what ever you do, will affect the actual parameter outside the function
$param++;
}
$a=2;
plus_by_reference( $a );
echo $a;
// output is 3
Il existe de nombreuses fonctions intégrées qui se comportent comme ceci. Comme la fonction sort () qui trie un tableau affectera directement le tableau et ne renverra pas un autre tableau trié.
Il y a cependant quelque chose d'intéressant à noter. Parce que le mode passe-par-valeur peut entraîner une utilisation accrue de la mémoire et PHP est un langage interprété (donc les programmes écrits en PHP ne sont pas aussi rapides que compilés) programmes), pour accélérer l'exécution du code et minimiser l'utilisation de la mémoire, il y a quelques ajustements dans l'interpréteur PHP. L'un est lazy-copy (je ne suis pas sûr du nom). Ce qui signifie cette:
Lorsque vous copiez une variable dans une autre, PHP copiera une référence à la première variable dans la deuxième variable. Ainsi, votre nouvelle variable est en fait une référence à la première jusqu'à présent. La valeur n'est pas encore copié. Mais si vous essayez de changer l'une de ces variables, PHP fera une copie de la valeur, puis changera la variable. De cette façon, vous aurez la possibilité d'économiser de la mémoire et le temps, SI VOUS NE CHANGEZ PAS LA VALEUR.
Alors:
$b=3;
$a=$b;
// $a points to $b, equals to $a=&$b
$b=4;
// now PHP will copy 3 into $a, and places 4 into $b
Après tout cela, si vous souhaitez placer la valeur de $ entryId dans la propriété 'entryId' de votre objet, le code ci-dessus le fera et ne copiera pas la valeur de entryId, jusqu'à ce que vous en changiez un, entraîne moins de mémoire usage. Si vous voulez qu'ils pointent tous deux vers la même valeur, utilisez ceci:
$this->entryId=&$entryId;
Non, comme d'autres l'ont dit, "Il n'y a pas de pointeur en PHP." et j'ajoute, il n'y a rien RAM_related en PHP.
Et aussi toutes les réponses sont claires. Mais il y avait des points laissés de côté auxquels je n'ai pas pu résister!
Au début, je dois dire que PHP est un langage vraiment puissant, sachant qu'il existe une construction nommée "eval", vous pouvez donc créer votre code PHP tout en exécutant (vraiment cool!)
bien qu'il y ait le danger de PHP_Injection qui est beaucoup plus destructeur que SQL_Injection. Il faut se méfier!
exemple:
Code:
$a='echo "Hello World.";';
eval ($a);
Sortie
Bonjour le monde.
Ainsi, au lieu d'utiliser un pointeur pour agir comme une autre variable, Vous pouvez créer une variable à partir de zéro!
La variable $ GLOBAL est assez utile, vous pouvez accéder à toutes les variables en utilisant ses clés.
exemple:
Code:
$three="Hello";$variable=" Amazing ";$names="World";
$arr = Array("three","variable","names");
foreach($arr as $VariableName)
echo $GLOBALS[$VariableName];
Sortie
Bonjour monde incroyable
Remarque: Autre superglobales peut faire le même tour à plus petite échelle.
Vous pouvez ajouter autant de "$" que vous voulez avant une variable, si vous savez ce que vous faites.
exemple:
Code:
$a="b";
$b="c";
$c="d";
$d="e";
$e="f";
echo $a."-";
echo $$a."-"; //Same as $b
echo $$$a."-"; //Same as $$b or $c
echo $$$$a."-"; //Same as $$$b or $$c or $d
echo $$$$$a; //Same as $$$$b or $$$c or $$d or $e
Sortie
b-c-d-e-f
Les références sont si proches des pointeurs, mais vous voudrez peut-être vérifier ce lien pour plus de précisions.
exemple 1:
Code:
$a="Hello";
$b=&$a;
$b="yello";
echo $a;
Sortie
bonjour
exemple 2:
Code:
function junk(&$tion)
{$GLOBALS['a'] = &$tion;}
$a="-Hello World<br>";
$b="-To You As Well";
echo $a;
junk($b);
echo $a;
Sortie
-Bonjour le monde
-À toi aussi
J'espère que ça aide.
Cette syntaxe est un moyen d'accéder à un membre de la classe. PHP n'a pas de pointeurs, mais il a des références.
La syntaxe que vous citez est fondamentalement la même que pour accéder à un membre depuis un pointeur vers une classe en C++ (alors que la notation par points est utilisée quand ce n'est pas un pointeur.)
Pour répondre à la deuxième partie de votre question - il n'y a pas de pointeurs en PHP.
Lorsque vous travaillez avec des objets, vous passez généralement par référence plutôt que par valeur - donc à certains égards, cela fonctionne comme un pointeur, mais est généralement complètement transparent.
Cela dépend de la version de PHP que vous utilisez.
Oui, il y a quelque chose de similaire aux pointeurs dans PHP mais peut ne pas correspondre à ce qui se passe exactement en c ou c ++. Voici un exemple.
$a = "test";
$b = "a";
echo $a;
echo $b;
echo $$b;
//output
test
a
test
Cela illustre un concept similaire de pointeurs en PHP.
Vous pouvez simuler des pointeurs vers des objets instanciés dans une certaine mesure:
class pointer {
var $child;
function pointer(&$child) {
$this->child = $child;
}
public function __call($name, $arguments) {
return call_user_func_array(
array($this->child, $name), $arguments);
}
}
Utilisez comme ceci:
$a = new ClassA();
$p = new pointer($a);
Si vous passez $ p, il se comportera comme un pointeur C++ concernant les appels de méthode (vous ne pouvez pas toucher directement les variables d'objet, mais c'est quand même mal :)).
entryId est une propriété d'instance de la classe actuelle ($ this) Et $ entryId est une variable locale
PHP peut utiliser quelque chose comme des pointeurs:
$y=array(&$x);
Maintenant, $ y agit comme un pointeur sur $ x et $ y [0] déréférence un pointeur.
Le tableau de valeurs (& $ x) n'est qu'une valeur, il peut donc être transmis à des fonctions, stocké dans d'autres tableaux, copié dans d'autres variables, etc. Vous pouvez même créer un pointeur vers cette variable de pointeur. (Cependant, la sérialisation cassera le pointeur.)
PHP transmet les tableaux et les objets par référence (pointeurs). Si vous voulez passer une variable normale Ex. $ var = 'boo'; puis utilisez $ boo = & $ var ;.