Suche…


Ganzzahlen

Integer-Werte in PHP können in Basis 2 (binär), Basis 8 (Oktal), Basis 10 (Dezimal) oder Basis 16 (Hexadezimal) nativ angegeben werden.

$my_decimal = 42;
$my_binary = 0b101010;
$my_octal = 052;
$my_hexadecimal = 0x2a;

echo ($my_binary + $my_octal) / 2;
// Output is always in decimal: 42

Ganze Zahlen sind je nach Plattform 32 oder 64 Bit lang. Die Konstante PHP_INT_SIZE die Ganzzahl in Byte. PHP_INT_MAX und (seit PHP 7.0) PHP_INT_MIN sind ebenfalls verfügbar.

printf("Integers are %d bits long" . PHP_EOL, PHP_INT_SIZE * 8);
printf("They go up to %d" . PHP_EOL, PHP_INT_MAX);

Integer-Werte werden bei Bedarf automatisch aus Floats, Booleans und Strings erstellt. Wenn eine explizite Typumwandlung erforderlich ist, kann dies mit der (int) oder (integer) :

$my_numeric_string = "123";
var_dump($my_numeric_string);
// Output: string(3) "123"
$my_integer = (int)$my_numeric_string;
var_dump($my_integer);
// Output: int(123)

Integer-Überlauf wird durch die Umwandlung in einen Float-Wert behandelt:

$too_big_integer = PHP_INT_MAX + 7;
var_dump($too_big_integer);
// Output: float(9.2233720368548E+18)

Es gibt keinen ganzzahligen Divisionsoperator in PHP, er kann jedoch mit einer impliziten Umwandlung simuliert werden, die immer "rundet", indem der Float-Part einfach gelöscht wird. Ab PHP Version 7 wurde eine Ganzzahl-Divisionsfunktion hinzugefügt.

$not_an_integer = 25 / 4;
var_dump($not_an_integer);
// Output: float(6.25)
var_dump((int) (25 / 4)); // (see note below)
// Output: int(6)
var_dump(intdiv(25 / 4)); // as of PHP7
// Output: int(6)

(Beachten Sie, dass die zusätzlichen Klammern um (25 / 4) benötigt werden, da der (int) -Stich eine höhere Priorität als die Division hat.)

Zeichenketten

Eine Zeichenfolge in PHP besteht aus einer Reihe von Einzelbyte-Zeichen (dh es gibt keine native Unicode-Unterstützung), die auf vier Arten angegeben werden kann:

Einzeln zitiert

Zeigt die Dinge fast vollständig "wie sie ist" an. Variablen und die meisten Escape-Sequenzen werden nicht interpretiert. Die Ausnahme ist, dass zur Anzeige eines wörtlichen einfachen Anführungszeichens das Symbol mit einem Backslash 'und einem Backslash mit einem anderen Backslash \ entkommen kann.

$my_string = 'Nothing is parsed, except an escap\'d apostrophe or backslash. $foo\n';
var_dump($my_string);

/*
string(68) "Nothing is parsed, except an escap'd apostrophe or backslash. $foo\n"
*/

Doppelter Anführungsstrich

Im Gegensatz zu einem String mit einfachen Anführungszeichen werden einfache Variablennamen und Escape-Sequenzen in den Strings ausgewertet. Geschweifte Klammern (wie im letzten Beispiel) können verwendet werden, um komplexe Variablennamen zu isolieren.

$variable1 = "Testing!";
$variable2 = [ "Testing?", [ "Failure", "Success" ] ];
$my_string = "Variables and escape characters are parsed:\n\n";
$my_string .= "$variable1\n\n$variable2[0]\n\n";
$my_string .= "There are limits: $variable2[1][0]";
$my_string .= "But we can get around them by wrapping the whole variable in braces: {$variable2[1][1]}";
var_dump($my_string);

/*
string(98) "Variables and escape characters are parsed:

Testing!

Testing?

There are limits: Array[0]"

But we can get around them by wrapping the whole variable in braces: Success

*/

Heredoc

In einer Heredoc-Zeichenfolge werden Variablennamen und Escape-Sequenzen auf ähnliche Weise analysiert wie in doppelten Anführungszeichen, obwohl für komplexe Variablennamen keine geschweiften Klammern verfügbar sind. Der Anfang der Zeichenfolge wird durch abgegrenzt <<< identifier und das Ende durch identifier , wo identifier ist ein beliebiger gültige PHP Namen. Die Endekennung muss in einer eigenen Zeile stehen. Vor oder nach dem Bezeichner ist kein Leerzeichen zulässig, obwohl es wie jede Zeile in PHP auch mit einem Semikolon abgeschlossen werden muss.

$variable1 = "Including text blocks is easier";
$my_string = <<< EOF
Everything is parsed in the same fashion as a double-quoted string,
but there are advantages. $variable1; database queries and HTML output
can benefit from this formatting.
Once we hit a line containing nothing but the identifier, the string ends.
EOF;
var_dump($my_string);

/*
string(268) "Everything is parsed in the same fashion as a double-quoted string,
but there are advantages. Including text blocks is easier; database queries and HTML output
can benefit from this formatting.
Once we hit a line containing nothing but the identifier, the string ends."
*/

Nowdoc

Ein nowdoc-String ist wie die einfach zitierte Version von heredoc, obwohl nicht einmal die grundlegendsten Escape-Sequenzen ausgewertet werden. Der Bezeichner am Anfang der Zeichenfolge wird in einfache Anführungszeichen gesetzt.

PHP 5.x 5.3
$my_string = <<< 'EOF'
A similar syntax to heredoc but, similar to single quoted strings,
nothing is parsed (not even escaped apostrophes \' and backslashes \\.)
EOF;
var_dump($my_string);

/*
string(116) "A similar syntax to heredoc but, similar to single quoted strings,
nothing is parsed (not even escaped apostrophes \' and backslashes \\.)"
*/

Boolean

Boolean ist ein Typ mit zwei Werten, die als true oder false .

Dieser Code setzt den Wert von $foo auf true und $bar auf false :

$foo = true;
$bar = false;

true und false unterscheiden nicht zwischen Groß- und Kleinschreibung, daher können auch TRUE und FALSE verwendet werden, sogar FaLsE ist möglich. Kleinbuchstaben werden am häufigsten verwendet und in den meisten Code-Style-Guides empfohlen, z. B. PSR-2 .

Booleans können in if-Anweisungen wie folgt verwendet werden:

if ($foo) { //same as evaluating if($foo == true)
    echo "true";
}

Aufgrund der Tatsache, dass PHP schwach typisiert ist, wird $foo , wenn es nicht true oder false , automatisch zu einem booleschen Wert gezwungen.
Die folgenden Werte führen zu false :

  • ein Nullwert: 0 (Ganzzahl), 0.0 (Float) oder '0' (String)
  • eine leere Zeichenfolge '' oder ein Array []
  • null (der Inhalt einer nicht festgelegten Variablen oder einer Variablen zugewiesen)

Jeder andere Wert ergibt true .

Um diesen losen Vergleich zu vermeiden, können Sie einen starken Vergleich mit === , wobei Wert und Typ verglichen werden. Siehe Typenvergleich für weitere Einzelheiten.

Um einen Typ in Boolean zu konvertieren, können Sie den Cast (boolean) (bool) oder (boolean) vor dem Typ verwenden.

var_dump((bool) "1"); //evaluates to true

oder rufen Sie die boolval Funktion auf:

var_dump( boolval("1") ); //evaluates to true

Boolesche Konvertierung in einen String (Beachten Sie, dass false einen leeren String ergibt):

var_dump( (string) true ); // string(1) "1"
var_dump( (string) false ); // string(0) ""

Boolesche Konvertierung in eine Ganzzahl:

var_dump( (int) true ); // int(1)
var_dump( (int) false ); // int(0)

Beachten Sie, dass auch das Gegenteil möglich ist:

var_dump((bool) "");        // bool(false)
var_dump((bool) 1);         // bool(true)

Auch alle Nicht-Null-Werte geben true zurück:

var_dump((bool) -2);        // bool(true)
var_dump((bool) "foo");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array());   // bool(false)
var_dump((bool) "false");   // bool(true)

Schweben

$float = 0.123;

Aus historischen Gründen wird "double" von gettype() im Falle eines Float zurückgegeben und nicht einfach "float".

Floats sind Fließkommazahlen, die eine höhere Ausgabegenauigkeit als einfache Ganzzahlen ermöglichen.

Floats und Ganzzahlen können zusammen verwendet werden, da PHP die Variablentypen lose ausgibt:

$sum = 3 + 0.14;

echo $sum; // 3.14

PHP zeigt Float nicht wie andere Sprachen an, zum Beispiel:

$var = 1;
echo ((float) $var); //returns 1 not 1.0

Warnung

Fließkomma-Präzision

(Von der PHP-Handbuchseite )

Fließkommazahlen haben eine begrenzte Genauigkeit. Obwohl dies vom System abhängig ist, gibt PHP normalerweise einen maximalen relativen Fehler aufgrund von Rundungen in der Größenordnung von 1,11e-16 aus. Nicht elementare Rechenoperationen geben können größere Fehler und Fehlerfortpflanzung muss berücksichtigt werden , wenn mehrere Operationen zusammengesetzt sind.

Außerdem haben rationale Zahlen, die als Fließkommazahlen in der Basis 10 genau dargestellt werden können, wie 0,1 oder 0,7, keine genaue Darstellung als Fließkommazahlen in der Basis 2 (binär), die unabhängig von der Mantissengröße intern verwendet werden . Daher können sie nicht ohne einen geringen Genauigkeitsverlust in ihre internen binären Gegenstücke umgewandelt werden. Dies kann zu verwirrenden Ergebnissen führen: Zum Beispiel gibt floor ((0,1 + 0,7) * 10) normalerweise 7 anstelle der erwarteten 8 zurück, da die interne Darstellung etwa 7,9999999999999991118 beträgt.

Vertrauen Sie also niemals den Ergebnissen der Gleitkommazahlen auf die letzte Ziffer und vergleichen Sie Gleitkommazahlen nicht direkt auf Gleichheit. Wenn eine höhere Genauigkeit erforderlich ist, sind die mathematischen Funktionen mit beliebiger Genauigkeit und die gmp-Funktionen verfügbar.

Abrufbar

Callables sind alles, was als Rückruf bezeichnet werden kann. Dinge, die als "Rückruf" bezeichnet werden können, lauten wie folgt:

  • Anonyme Funktionen

  • Standard-PHP-Funktionen (Hinweis: keine Sprachkonstrukte )

  • Statische Klassen

  • nicht statische Klassen (unter Verwendung einer alternativen Syntax )

  • Spezifische Objekt- / Klassenmethoden

  • Objekte selbst, solange sich das Objekt in Schlüssel 0 eines Arrays befindet

    Beispiel für das Referenzieren eines Objekts als Arrayelement:

 $obj = new MyClass();
 call_user_func([$obj, 'myCallbackMethod']);

Rückrufe können durch bezeichnet callable Typ Hinweis ab PHP 5.4.

$callable = function () {
    return 'value';
};

function call_something(callable $fn) {
    call_user_func($fn);
}

call_something($callable);

Null

PHP steht für "no value" mit dem null Schlüsselwort. Er ähnelt dem Nullzeiger in C-Sprache und dem NULL-Wert in SQL.

Die Variable auf null setzen:

$nullvar = null; // directly

function doSomething() {} // this function does not return anything
$nullvar = doSomething(); // so the null is assigned to $nullvar

Überprüfen, ob die Variable auf null gesetzt wurde:

if (is_null($nullvar)) { /* variable is null */ }

if ($nullvar === null) {  /* variable is null */ }

Null gegen undefinierte Variable

Wenn die Variable nicht definiert oder nicht gesetzt wurde, sind alle Tests gegen die Null erfolgreich, sie generieren jedoch eine Notice: Undefined variable: nullvar : Notice: Undefined variable: nullvar :

$nullvar = null;
unset($nullvar);
if ($nullvar === null) {  /* true but also a Notice is printed */ }
if (is_null($nullvar)) {  /* true but also a Notice is printed */ }

Deshalb müssen undefinierte Werte mit isset überprüft isset :

if (!isset($nullvar)) {  /* variable is null or is not even defined */  }

Typvergleich

Es gibt zwei Arten von Vergleichen : einen losen Vergleich mit == und einen strengen Vergleich mit === . Ein strikter Vergleich stellt sicher, dass sowohl der Typ als auch der Wert beider Bedienerseiten gleich sind.

// Loose comparisons
var_dump(1 == 1); // true
var_dump(1 == "1"); // true
var_dump(1 == true); // true
var_dump(0 == false); // true

// Strict comparisons
var_dump(1 === 1); // true
var_dump(1 === "1"); // false
var_dump(1 === true); // false
var_dump(0 === false); // false

// Notable exception: NAN — it never is equal to anything
var_dump(NAN == NAN); // false
var_dump(NAN === NAN); // false

Sie können einen starken Vergleich auch verwenden, um zu überprüfen, ob Typ und Wert mit !== nicht übereinstimmen.

Ein typisches Beispiel, bei dem der Operator == nicht ausreicht, sind Funktionen, die verschiedene Typen zurückgeben können, z. B. strpos searchword den searchword false wenn das searchword nicht gefunden wird, und die Übereinstimmungsposition ( int ).

if(strpos('text', 'searchword') == false)
  // strpos returns false, so == comparison works as expected here, BUT:
if(strpos('text bla', 'text') == false)
  // strpos returns 0 (found match at position 0) and 0==false is true.
  // This is probably not what you expect!
if(strpos('text','text') === false)
  // strpos returns 0, and 0===false is false, so this works as expected.

Geben Sie Casting ein

In der Regel wird PHP den Datentyp, den Sie verwenden möchten, aus dem Kontext, in dem es verwendet wird, richtig erraten. Manchmal ist es jedoch hilfreich, einen Typ manuell zu erzwingen. Dies kann erreicht werden, indem der Deklaration der Name des erforderlichen Typs in Klammern vorangestellt wird:

$bool = true;
var_dump($bool); // bool(true)

$int = (int) true;
var_dump($int); // int(1)

$string = (string) true;
var_dump($string); // string(1) "1"
$string = (string) false;
var_dump($string); // string(0) ""

$float = (float) true;
var_dump($float); // float(1)

$array = ['x' => 'y'];
var_dump((object) $array); // object(stdClass)#1 (1) { ["x"]=> string(1) "y" } 

$object = new stdClass();
$object->x = 'y';
var_dump((array) $object); // array(1) { ["x"]=> string(1) "y" }

$string = "asdf";
var_dump((unset)$string); // NULL

Aber Achtung: Nicht alle Typen wirken so, wie man es erwarten könnte:

// below 3 statements hold for 32-bits systems (PHP_INT_MAX=2147483647)
// an integer value bigger than PHP_INT_MAX is automatically converted to float:
var_dump(       999888777666 ); // float(999888777666)
// forcing to (int) gives overflow:
var_dump((int)  999888777666 ); // int(-838602302)
// but in a string it just returns PHP_INT_MAX
var_dump((int) "999888777666"); // int(2147483647)

var_dump((bool) []);      // bool(false) (empty array)
var_dump((bool) [false]); // bool(true)  (non-empty array)

Ressourcen

Eine Ressource ist ein spezieller Variablentyp, der auf eine externe Ressource verweist, beispielsweise eine Datei, einen Socket, einen Stream, ein Dokument oder eine Verbindung.

$file = fopen('/etc/passwd', 'r');

echo gettype($file);
# Out: resource

echo $file;
# Out: Resource id #2

Es gibt verschiedene (Unter-) Ressourcentypen. Sie können den Ressourcentyp mit get_resource_type() überprüfen:

$file = fopen('/etc/passwd', 'r');
echo get_resource_type($file);
#Out: stream

$sock = fsockopen('www.google.com', 80);
echo get_resource_type($sock);
#Out: stream

Eine vollständige Liste der integrierten Ressourcentypen finden Sie hier .

Geben Sie Jonglieren ein

PHP ist eine schwach typisierte Sprache. Es ist keine explizite Deklaration von Datentypen erforderlich. Der Kontext, in dem die Variable verwendet wird, bestimmt ihren Datentyp. Die Konvertierung erfolgt automatisch:

$a = "2";             // string 
$a = $a + 2;          // integer (4) 
$a = $a + 0.5;        // float (4.5)
$a = 1 + "2 oranges"; // integer (3)


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow