Grundläggande

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

Grundläggande om variabler i PHP

Variabler i PHP representeras av ett dollartecken följt av variabelns namn. Variabelnamnet är skiftlägeskänsligt.

Variabelnamn följer samma regler som andra etiketter i PHP. Ett giltigt variabelnamn börjar med en bokstav eller ett understrykningstecken, följt av valfritt antal bokstäver, siffror eller understrykningstecken. Som ett reguljärt uttryck skulle det uttryckas så här: ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$

Notera: För våra ändamål här är en bokstav a-z, A-Z och bytes från 128 till 255 (0x80-0xff).

Notera: $this är en speciell variabel som inte kan tilldelas. Före PHP 7.1.0 var indirekt tilldelning möjlig (t.ex. genom att använda variabla variabler).

Tips: Se även Userland Naming Guide.

För information om funktioner relaterade till variabler, se Variable Functions Reference.

$var = 'Bob'; $Var = 'Joe'; echo "$var, $Var"; // skriver ut "Bob, Joe"

$4site = 'not yet'; // ogiltig; börjar med ett nummer $_4site = 'not yet'; // giltig; börjar med ett understrykningstecken $täyte = 'mansikka'; // giltig; 'ä' är (utökat) ASCII 228. Som standard tilldelas variabler alltid efter värde. Det betyder att när du tilldelar ett uttryck till en variabel, kopieras hela värdet av det ursprungliga uttrycket till destinationsvariabeln. Det innebär till exempel att efter att ha tilldelat en variabels värde till en annan, kommer ändringar av en av dessa variabler inte att påverka den andra. För mer information om denna typ av tilldelning, se kapitlet om Expressions.

PHP erbjuder också ett annat sätt att tilldela värden till variabler: tilldela efter referens. Det betyder att den nya variabeln helt enkelt refererar till (med andra ord "blir en alias för" eller "pekar på") den ursprungliga variabeln. Ändringar i den nya variabeln påverkar den ursprungliga, och vice versa.

För att tilldela efter referens, förbered bara ett ampersand (&) i början av variabeln som tilldelas (källvariabeln). Till exempel skriver följande kodsnutt ut 'Mitt namn är Bob' två gånger:

$foo = 'Bob'; // Tilldela värdet 'Bob' till $foo $bar = &$foo; // Referera $foo via $bar. $bar = "Mitt namn är $bar"; // Ändra $bar... echo $bar; echo $foo; // $foo är också ändrad. En viktig sak att notera är att endast namngivna variabler kan tilldelas genom referens.

$foo = 25; $bar = &$foo; // Detta är en giltig tilldelning. $bar = &(24 * 7); // Ogiltig; referenser ett onämnd uttryck.

function test() {

  return 25;

}

$bar = &test(); // Ogiltig. Det är inte nödvändigt att initiera variabler i PHP, men det är en mycket god praxis. Oinitierade variabler har ett standardvärde av sin typ beroende på sammanhanget där de används - booleans standard till false, heltal och flyttal standard till noll, strängar (t.ex. använda i echo) sätts som en tom sträng och arrayer blir till en tom array.

Exempel #1 Standardvärden för oinitierade variabler:

// Odefinierad OCH oanvänd (inget användningssammanhang) variabel; skriver ut NULL var_dump($unset_var);

// Boolesk användning; skriver ut 'false' echo $unset_bool ? "true\n" : "false\n";

// Stränganvändning; skriver ut 'string(3) "abc"' $unset_str .= 'abc'; var_dump($unset_str);

// Heltalsanvändning; skriver ut 'int(25)' $unset_int += 25; // 0 + 25 => 25 var_dump($unset_int);

// Flyttalanvändning; skriver ut 'float(1.25)' $unset_float += 1.25; var_dump($unset_float);

// Array-användning; skriver ut array(1) { [3]=> string(3) "def" } $unset_arr[3] = "def"; // array() + array(3 => "def") => array(3 => "def") var_dump($unset_arr);

// Objektanvändning; skapar nytt stdClass-objekt // Skriver ut: object(stdClass)#1 (1) { ["foo"]=> string(3) "bar" } $unset_obj->foo = 'bar'; var_dump($unset_obj); Att förlita sig på standardvärdet av en oinitierad variabel är problematiskt i fallet där man inkluderar en fil i en annan som använder samma variabelnamn. E_WARNING (före PHP 8.0.0, E_NOTICE) nivå fel ges i fall av att arbeta med oinitierade variabler, dock inte i fallet med att lägga till element till den oinitierade arrayen. isset() språkkonstruktion kan användas för att upptäcka om en variabel redan har initierats.