PHP 8.1.0 RC 2 available for testing

Grundlegendes

Variablen werden in PHP durch ein Dollar-Zeichen ($) gefolgt vom Namen der Variable dargestellt. Bei Variablennamen wird zwischen Groß- und Kleinschreibung unterschieden (case-sensitive).

Variablennamen werden in PHP nach den gleichen Regeln wie andere Bezeichner erstellt. Ein gültiger Variablenname beginnt mit einem Buchstaben oder einem Unterstrich ("_"), gefolgt von einer beliebigen Anzahl von Buchstaben, Zahlen oder Unterstrichen. Als regulärer Ausdruck (regular expression) würde das wie folgt ausgedrückt: ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$.

Hinweis: Unserem Zweck entspricht also ein Buchstabe von a bis z bzw. A bis Z oder ein Bytewert von 128 bis 255 (0x80-0xff).

Hinweis: $this ist eine spezielle Variable, die nicht geändert werden kann. Vor PHP 7.1.0 war die indirekte Zuweisung, z.B. durch die Verwendung von variable Variablen, möglich.

Tipp

Siehe auch Userland-Namensregeln.

Information zu Funktionen im Zusammenhang mit Variablen finden Sie im Abschnitt Funktionen zur Behandlung von Variablen.

<?php
$var 
"du";
$Var "ich";
echo 
"$var$Var";           // gibt "du, ich" aus

$4site  'nicht jetzt';     // ungültig, da Anfang eine Zahl
$_4site 'nicht jetzt';     // gültig, da Unterstrich am Anfang
$täbyte 'irgendwas';       // gültig, da 'ä' dem (Erweiterten) ASCII-Wert 228 entspricht
?>

Standardmäßig wird Variablen immer ein Wert zugewiesen. Das heißt, wenn Sie einer Variablen einen Ausdruck zuweisen, wird der gesamte Inhalt des Originalausdrucks in die Zielvariable kopiert. Das bedeutet zum Beispiel, dass nach der Zuweisung des Wertes einer Variablen an eine andere die Änderung einer der Variablen keinen Einfluss auf die andere hat. Für weitere Informationen zu dieser Art der Zuordnung lesen Sie bitte das Kapitel unter Expressions / Ausdrücke.

PHP bietet eine andere Möglichkeit der Wertzuweisung bei Variablen: Zuweisung durch Referenzierung. Das bedeutet, dass der Wert der neuen Variablen eine Referenz zur Ursprungs-Variablen darstellt (mit anderen Worten: Der Wert ist ein Alias bzw. Zeiger auf den Inhalt der Ursprungsvariablen). Änderungen der neuen Variablen ändern auch deren Ursprungs-Variable und umgekehrt.

Für die Zuweisung per Referenz müssen Sie der Ursprungsvariablen, die Sie einer anderen Variablen zuweisen wollen, lediglich ein kaufmännisches Und (&) voranstellen. Das folgende Code-Schnipsel wird zweimal 'Ich heiße Bob' ausgeben:

<?php
$foo 
'Bob';             // 'Bob' der Variablen $foo zuweisen.
$bar = &$foo;             // $foo per $bar referenzieren.
$bar "Ich heiße $bar";  // $bar verändern...
echo $bar;
echo 
$foo;                // $foo wurde ebenfalls verändert.
?>

Zu beachten ist, dass nur Variablennamen referenziert werden können.

<?php
$foo 
25;
$bar = &$foo;      // Gültige Zuweisung.
$bar = &(24 7);  // Ungültig, da ein unbenannter Ausdruck referenziert wird.

function test()
{
    return 
25;
}

$bar = &test();    // Ungültig.
?>

Es ist in PHP nicht zwingend notwendig, Variablen zu initialisieren, es wird aber trotzdem empfohlen. Nicht initialisierte Variablen haben einen Vorgabewert der vom Typ abhängt – boolesche Werte sind standardmäßig false, Ganz- und Gleitkommazahlen sind standardmäßig Null (0), Zeichenketten, die z.B. in echo verwendet werden, sind standardmäßig leer, und Arrays ebenfalls.

Beispiel #1 Vorgabewerte uninitialisierter Variablen

<?php
// Nicht gesetzte UND nicht referenzierte (kein Verwendungskontext) Variable;
// gibt NULL aus
var_dump($unset_var);

// Verwendung als boolescher Wert; gibt 'false' aus (siehe den ternären
// Operator für Details zu dieser Syntax)
echo($unset_bool "true\n" "false\n");

// Verwendung als Zeichenkette; gibt 'string(3) "abc"' aus
$unset_str .= 'abc';
var_dump($unset_str);

// Verwendung als Ganzzahl; gibt 'int(25)' aus
$unset_int += 25// 0 + 25 => 25
var_dump($unset_int);

// Verwendung als Gleitkommazahl; gibt 'float(1.25)' aus
$unset_float += 1.25;
var_dump($unset_float);

// Verwendung als Array; gibt array(1) {  [3]=>  string(3) "def" } aus
$unset_arr[3] = "def"// array() + array(3 => "def") => array(3 => "def")
var_dump($unset_arr);

// Verwendung als Objekt; erzeugt ein neues stdClass-Objekt
// (siehe http://www.php.net/manual/en/reserved.classes.php)
// Gibt aus: object(stdClass)#1 (1) {  ["foo"]=>  string(3) "bar" }
$unset_obj->foo 'bar';
var_dump($unset_obj);
?>

Es ist problematisch sich auf den Vorgabewert einer nicht initialisierten Variable zu verlassen, wenn Sie eine Datei in eine andere inkludieren, die den gleichen Variablennamen verwendet. Bei Zugriffen auf nicht initialisierte Variablen wird ein Fehler der Stufe E_NOTICE ausgelöst, allerdings trifft dies nicht auf das Anfügen von Elementen an nicht initialisierte Arrays zu. Das isset() Sprachkonstrukt kann verwendet werden, um zu prüfen ob eine Variable bereits initialisiert wurde.

add a note add a note

User Contributed Notes 6 notes

up
66
jeff dot phpnet at tanasity dot com
11 years ago
This page should include a note on variable lifecycle:

Before a variable is used, it has no existence. It is unset. It is possible to check if a variable doesn't exist by using isset(). This returns true provided the variable exists and isn't set to null. With the exception of null, the value a variable holds plays no part in determining whether a variable is set.

Setting an existing variable to null is a way of unsetting a variable. Another way is variables may be destroyed by using the unset() construct.

<?php
print isset($a); // $a is not set. Prints false. (Or more accurately prints ''.)
$b = 0; // isset($b) returns true (or more accurately '1')
$c = array(); // isset($c) returns true
$b = null; // Now isset($b) returns false;
unset($c); // Now isset($c) returns false;
?>

is_null() is an equivalent test to checking that isset() is false.

The first time that a variable is used in a scope, it's automatically created. After this isset is true. At the point at which it is created it also receives a type according to the context.

<?php
$a_bool
= true;   // a boolean
$a_str = 'foo';    // a string
?>

If it is used without having been given a value then it is uninitalized and it receives the default value for the type. The default values are the _empty_ values. E.g  Booleans default to FALSE, integers and floats default to zero, strings to the empty string '', arrays to the empty array.

A variable can be tested for emptiness using empty();

<?php
$a
= 0; //This isset, but is empty
?>

Unset variables are also empty.

<?php
empty($vessel); // returns true. Also $vessel is unset.
?>

Everything above applies to array elements too.

<?php
$item
= array();
//Now isset($item) returns true. But isset($item['unicorn']) is false.
//empty($item) is true, and so is empty($item['unicorn']

$item['unicorn'] = '';
//Now isset($item['unicorn']) is true. And empty($item) is false.
//But empty($item['unicorn']) is still true;

$item['unicorn'] = 'Pink unicorn';
//isset($item['unicorn']) is still true. And empty($item) is still false.
//But now empty($item['unicorn']) is false;
?>

For arrays, this is important because accessing a non-existent array item can trigger errors; you may want to test arrays and array items for existence with isset before using them.
up
4
anisgazig at gmail dot com
7 months ago
clear concept of variable declaration rules and classification

variable declaration rules:

1.start with dollar sign($)
2.first letter of variable name comes from a-zA-z_
3.next letters of variable name comes from a-zA-Z0-9_
4.no space,no syntex

classification of variables:

Variable are mainly Two types
1.Predefined Variable
2.User Define Variable

Predefined Variable
There are 12 predefined variables in php 8
1.$GLOBALS
2.$_SERVER
3.$_REQUEST
4.$_FILES
5.$_ENV
6.$_SESSION
7.$_COOKIE
8.$_GET
9.$_POST
10.$http_response_header
11.$argc
12.$argv

User Define Variable
User Define variable are 3 types
1.variable scope
2.variable variables
3.reference variable

Variable Scope
variable scope are 3 types
1.local scope
2.global scope
3.static variable
up
-10
Anonymous
4 years ago
I highly recommend to use an editor that can list all variable names in a separate window.

The reason are typing errors in variable names.

<?php
$somename
= "nobody";
// Now we want to use $somename  somewhere
echo $somemane ;
?>
And wonder why it doesn't print "nobody".
The reason is simple, we have a typing error in $somename and $somemane is a new variable.

In this example it might be easy to find. But if you use variables to calculate some things, you might hardly find it and ask yourself why your calculation is always wrong.
With an editor that list all variable names in a separate window such "double" variables but with wrong typing can be easily found.

BTW:
It would have been better, if the PHP language would require to use some sort of keyword to define a variable the first time.
up
-24
baoquyen804 at gmail dot com
3 years ago
When examining the variable name with the regular expression [a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ xff] this will cause an error:

<?php
$name
="aa'1'";
if(!
preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/',$name))
    echo
$name.' is not a valid PHP variable name';
else
    echo
$name.' is valid PHP variable name';
// output aa'1' is valid PHP variable name
//but:
$aa'1' = 10; // error syntac
?>

instead use it ^[a-zA-Z][_]?[\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

<?php
$name
="aa'1'";
if(!
preg_match('/^[a-zA-Z][_]?[\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $name))
   echo
$name.' is not a valid PHP variable name';
else
    echo
$name.' is valid PHP variable name';
// output aa'1' is not valid PHP variable name
?>
up
-31
maurizio dot domba at pu dot t-com dot hr
10 years ago
If you need to check user entered value for a proper PHP variable naming convention you need to add ^ to the above regular expression so that the regular expression should be '^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'.

Example

<?php
$name
="20011aa";
if(!
preg_match('/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/',$name))
   echo
$name.' is not a valid PHP variable name';
else
   echo
$name.' is valid PHP variable name';
?>

Outputs: 2011aa is valid PHP variable name

but

<?php
$name
="20011aa";
if(!
preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/',$name))
   echo
$name.' is not a valid PHP variable name';
else
   echo
$name.' is valid PHP variable name';
?>

Outputs: 2011aa is not a valid PHP variable name
up
-7
anisgazig at gmail dot com
7 months ago
$this is a special variable so we can not assign it.But Prior to PHP 7.1.0, indirect assignment such as variable variables are allowed.

$bd = "this";
$$bd = "CountryNickName";

echo $this;//allowed prior to PHP 7.1.0

but from the version of 7.1.0,it was allowed.
To Top