Variabla variabler: Skillnad mellan sidversioner
Admin (diskussion | bidrag) |
Admin (diskussion | bidrag) |
||
(En mellanliggande sidversion av samma användare visas inte) | |||
Rad 3: | Rad 3: | ||
<br> | <br> | ||
<code><?php | <code><?php<br>$a = 'hello';</code> | ||
<br>$a = 'hello';</code> | |||
<code>?></code> | <code>?></code> | ||
En variabel variabel tar värdet av en variabel och behandlar det som namnet på en variabel. I exemplet ovan kan ''hello'' användas som namnet på en variabel genom att använda två dollartecken. Till exempel: | |||
<br> | <br> | ||
<code>?></code><br>Vid denna tidpunkt har två variabler definierats och lagrats i PHP:s symbolträd: $a med innehållet "hello" och $hello med innehållet "world". Därför kommer detta uttryck: | <code><?php<br>$$a = 'world';</code> | ||
<br> | |||
<code><?php<br>echo "$a {$$a}";<br>?><br></code>att producera exakt samma utdata som: | <code>?></code><br>Vid denna tidpunkt har två variabler definierats och lagrats i PHP:s symbolträd: $a med innehållet "hello" och $hello med innehållet "world". Därför kommer detta uttryck:<br><code><?php<br>echo "$a {$$a}";<br>?><br></code>att producera exakt samma utdata som: | ||
<br> | <br><code><?php<br>echo "$a $hello";<br>?><br></code>dvs. de producerar båda: hello world. | ||
<code><?php<br>echo "$a $hello";<br>?><br></code>dvs. de producerar båda: hello world. | |||
<br> | <br> | ||
=== Variabla variabler med arrayer === | === Variabla variabler med arrayer === | ||
<br>För att använda variabla variabler med arrayer måste man lösa ett tvetydighetsproblem. Det vill säga, om du skriver $$a[1] så måste tolken veta om du menade att använda $a[1] som en variabel, eller om du ville ha $$a som variabeln och sedan index [1] från den variabeln. Syntaxen för att lösa denna tvetydighet är: ${$a[1]} för det första fallet och ${$a}[1] för det andra.<br> | <br>För att använda variabla variabler med arrayer måste man lösa ett tvetydighetsproblem. Det vill säga, om du skriver $$a[1] så måste tolken veta om du menade att använda $a[1] som en variabel, eller om du ville ha $$a som variabeln och sedan index [1] från den variabeln. Syntaxen för att lösa denna tvetydighet är: ${$a[1]} för det första fallet och ${$a}[1] för det andra.<br> | ||
<br> | |||
<br>'''Exempel #1 Variabel egenskap exempel''' | === Tillgång till klass egenskaper med variabla variabelnamn === | ||
<br>Klassegenskaper kan också nås med variabla egenskapsnamn. Det variabla egenskapsnamnet kommer att lösas inom den omfattning från vilken anropet görs. Till exempel, om du har ett uttryck som $foo->$bar, kommer den lokala omfattningen att undersökas för $bar och dess värde kommer att användas som namnet på egenskapen hos $foo. Detta gäller även om $bar är en åtkomst till en array.<br><br>Krullparenteser kan också användas för att tydligt avgränsa egenskapsnamnet. De är mest användbara när man når värden inom en egenskap som innehåller en array, när egenskapsnamnet består av flera delar eller när egenskapsnamnet innehåller tecken som annars inte är giltiga (t.ex. från json_decode() eller SimpleXML).<br> | |||
<br><code | <br>'''Exempel #1 Variabel egenskap exempel'''<br><code><?php<br>class foo {<br> var $bar = 'I am bar.';<br> var $arr = array('I am A.', 'I am B.', 'I am C.');<br> var $r = 'I am r.';<br>}<br><br>$foo = new foo();<br>$bar = 'bar'; | ||
<br>$baz = array('foo', 'bar', 'baz', 'quux');<br>echo $foo->$bar . "\n";<br>echo $foo->{$baz[1]} . "\n";<br><br>$start = 'b';<br>$end = 'ar'; | |||
<br>class foo { | |||
<br> var $bar = 'I am bar.'; | |||
<br> var $arr = array('I am A.', 'I am B.', 'I am C.'); | |||
<br> var $r = 'I am r.'; | |||
<br>} | |||
<br> | |||
<br>$foo = new foo(); | |||
<br>$bar = 'bar'; | |||
<br>$baz = array('foo', 'bar', 'baz', 'quux'); | |||
<br>echo $foo->$bar . "\n"; | |||
<br>echo $foo->{$baz[1]} . "\n"; | |||
<br> | |||
<br>$start = 'b'; | |||
<br>$end = 'ar'; | |||
<br>echo $foo->{$start . $end} . "\n"; | <br>echo $foo->{$start . $end} . "\n"; | ||
<br> | <br> | ||
Rad 58: | Rad 40: | ||
<br> | <br> | ||
<br>Observera att variabla variabler inte kan användas med PHP:s Superglobala arrayer inom funktioner eller klassmetoder. Variabeln $this är också en speciell variabel som inte kan refereras dynamiskt. | <br>Observera att variabla variabler inte kan användas med PHP:s Superglobala arrayer inom funktioner eller klassmetoder. Variabeln $this är också en speciell variabel som inte kan refereras dynamiskt. | ||
[[PHP]] | |||
[[Språkreferens]] | |||
[[Kategori:Php]] |
Nuvarande version från 14 augusti 2024 kl. 16.35
Variabla variabler
Ibland kan det vara praktiskt att kunna ha variabla variabelnamn. Det vill säga, ett variabelnamn som kan ställas in och användas dynamiskt. En vanlig variabel ställs in med ett uttryck som:
<?php
$a = 'hello';
?>
En variabel variabel tar värdet av en variabel och behandlar det som namnet på en variabel. I exemplet ovan kan hello användas som namnet på en variabel genom att använda två dollartecken. Till exempel:
<?php
$$a = 'world';
?>
Vid denna tidpunkt har två variabler definierats och lagrats i PHP:s symbolträd: $a med innehållet "hello" och $hello med innehållet "world". Därför kommer detta uttryck:<?php
att producera exakt samma utdata som:
echo "$a {$$a}";
?><?php
dvs. de producerar båda: hello world.
echo "$a $hello";
?>
Variabla variabler med arrayer
För att använda variabla variabler med arrayer måste man lösa ett tvetydighetsproblem. Det vill säga, om du skriver $$a[1] så måste tolken veta om du menade att använda $a[1] som en variabel, eller om du ville ha $$a som variabeln och sedan index [1] från den variabeln. Syntaxen för att lösa denna tvetydighet är: ${$a[1]} för det första fallet och ${$a}[1] för det andra.
Tillgång till klass egenskaper med variabla variabelnamn
Klassegenskaper kan också nås med variabla egenskapsnamn. Det variabla egenskapsnamnet kommer att lösas inom den omfattning från vilken anropet görs. Till exempel, om du har ett uttryck som $foo->$bar, kommer den lokala omfattningen att undersökas för $bar och dess värde kommer att användas som namnet på egenskapen hos $foo. Detta gäller även om $bar är en åtkomst till en array.
Krullparenteser kan också användas för att tydligt avgränsa egenskapsnamnet. De är mest användbara när man når värden inom en egenskap som innehåller en array, när egenskapsnamnet består av flera delar eller när egenskapsnamnet innehåller tecken som annars inte är giltiga (t.ex. från json_decode() eller SimpleXML).
Exempel #1 Variabel egenskap exempel<?php
class foo {
var $bar = 'I am bar.';
var $arr = array('I am A.', 'I am B.', 'I am C.');
var $r = 'I am r.';
}
$foo = new foo();
$bar = 'bar';
$baz = array('foo', 'bar', 'baz', 'quux');
echo $foo->$bar . "\n";
echo $foo->{$baz[1]} . "\n";
$start = 'b';
$end = 'ar';
echo $foo->{$start . $end} . "\n";
$arr = 'arr';
echo $foo->{$arr[1]} . "\n";
?>
Ovanstående exempel kommer att skriva ut:
;Utdata:
:I am bar.
:I am bar.
:I am bar.
:I am r.
:Varning
Observera att variabla variabler inte kan användas med PHP:s Superglobala arrayer inom funktioner eller klassmetoder. Variabeln $this är också en speciell variabel som inte kan refereras dynamiskt.