Typeinführung
PHP unterstützt 8 primitive Datentypen.
Vier Skalartypen:
Zwei Verbindungstypen:
Schließlich gibt es noch zwei besondere Typen:
Wenn Sie den Wert und Typ eines Ausdrucks überprüfen möchten, verwenden Sie die Funktion var_dump()
.
<code><?php $a = array(1, 2, array("a", "b", "c")); var_dump($a); $b = 3.1; $c = true; var_dump($b, $c);</code>
Der obige Code druckt die relevanten Informationen der Variablen über var_dump()
und das Ausgabeergebnis ist wie folgt (PHP-Version 5.5.12).
<code>array (size=3) 0 => int 1 1 => int 2 2 => array (size=3) 0 => string 'a' (length=1) 1 => string 'b' (length=1) 2 => string 'c' (length=1) float 3.1 boolean true</code>
Wenn Sie nur eine für Menschen lesbare Darstellung des Typs zum Debuggen benötigen, verwenden Sie die Funktion gettype()
. Um einen bestimmten Typ anzuzeigen, verwenden Sie nicht gettype()
, sondern die Funktion is_type
. Verwenden Sie is_type
, um Parameter zu filtern.
Wenn Sie eine Variable auf einen bestimmten Typ zwingen möchten, können Sie Cast oder die Funktion settype()
verwenden. Beachten Sie, dass Variablen je nach ihrem jeweiligen Typ in bestimmten Situationen unterschiedliche Werte annehmen können.
Boolescher Typ
Besonderer Hinweis: Bei der Konvertierung in einen Booleschen Wert gelten die folgenden Werte als FALSCH:
Solange es sich um ein Objekt handelt, ist der Rückgabewert TRUE.
Das folgende Programm kann Ihr Verständnis der booleschen Typkonvertierung vertiefen.
<code><?php var_dump((bool) array()); // boolean false var_dump((bool) ""); // boolean false var_dump((bool) "0"); // boolean false var_dump((bool) "00"); // boolean true var_dump((bool) "false"); // boolean true var_dump((bool) (new stdClass())); // boolean true var_dump((bool) ((object) array())); // boolean true</code>
Ganzzahl
Um den Oktalausdruck zu verwenden, muss 0 (Null) vor der Zahl hinzugefügt werden.
Um einen hexadezimalen Ausdruck zu verwenden, muss 0x vor der Zahl hinzugefügt werden.
Um einen binären Ausdruck zu verwenden, muss 0b vor der Zahl hinzugefügt werden.
Binär ausgedrückte Ganzzahlen sind seit PHP 5.4.0 verfügbar.
Die Wortlänge des ganzzahligen Werts kann durch die Konstante PHP_INT_SIZE
dargestellt werden, und der Maximalwert kann durch die Konstante PHP_INT_MAX
dargestellt werden.
<code><?php var_dump(PHP_INT_SIZE); // int 4 var_dump(PHP_INT_MAX); // int 2147483647 var_dump(01090); // int 8 八进制 010 = 十进制 8</code>
In der letzten Anweisung des obigen Programms passierte bei der Verarbeitung von Oktalwerten etwas Seltsames. Denn wenn Sie eine unzulässige Zahl (z. B. 8 oder 9) an eine Oktalzahl übergeben, werden die restlichen Ziffern ignoriert.
Wenn die angegebene Zahl den Bereich einer Ganzzahl überschreitet, wird sie als Gleitkommazahl interpretiert. Wenn das Ergebnis der Operation den Bereich einer Ganzzahl überschreitet, wird ebenfalls Float zurückgegeben.
In PHP gibt es keinen ganzzahligen Divisionsoperator. 1/2 ergibt Float 0,5. Der Wert kann in eine Ganzzahl umgewandelt werden, wobei der Dezimalteil verworfen wird oder zur besseren Rundung die Funktion round()
verwendet wird.
Im Handbuch heißt es, niemals einen unbekannten Bruch in eine ganze Zahl umzuwandeln, da dies manchmal zu unvorhersehbaren Ergebnissen führen kann.
<code><?php echo (int)((0.1 + 0.7) * 10);</code>
Das Ausgabeergebnis dieses Programms ist 7, vertrauen Sie niemals Gleitkommazahlen!
schweben
Bestimmte mathematische Operationen erzeugen ein Ergebnis, das durch die Konstante NAN
dargestellt wird. Dieses Ergebnis stellt einen Wert dar, der in der Gleitkommaarithmetik undefiniert oder nicht darstellbar ist. Jeder lockere oder strenge Vergleich dieses Werts mit einem anderen Wert führt zu FALSE.
Zeichenfolge Zeichenfolge
Eine Zeichenfolge besteht aus einer Reihe von Zeichen, wobei jedes Zeichen einem Byte entspricht. Die Implementierung ist ein Array aus Bytes plus einer Ganzzahl, die die Pufferlänge angibt. Das bedeutet, dass PHP nur einen Zeichensatz von 256 unterstützen kann und daher Unicode nicht unterstützt. Wie wird Chinesisch angezeigt? Schreiben Sie zunächst Ihre Fragen auf.
Strings haben 4 grammatikalische Ausdrücke:
Einfache Anführungszeichen
Um ein einzelnes Anführungszeichen selbst auszudrücken, müssen Sie es maskieren, indem Sie einen Backslash () davor einfügen.
Um einen Backslash selbst auszudrücken, verwenden Sie zwei Backslashes ().
Jeder andere Backslash wird als Backslash selbst behandelt.
Wenn die Zeichenfolge jedoch nur einen in einfache Anführungszeichen gesetzten Backslash enthält, wird dieser auch ausgegeben. Warum ist das so?
Doppelte Anführungszeichen
Kann Escape-Zeichen analysieren. Die wichtigste Funktion ist, dass Variablen analysiert werden.
Sowohl einfache als auch doppelte Anführungszeichen unterstützen die mehrzeilige Eingabe von Zeichenfolgen.
Heredoc-Struktur
Diese Struktur wurde in früheren Programmierungen selten verwendet. Erfahren Sie hier mehr darüber.
Die-Struktur sieht ungefähr wie folgt aus:
Geben Sie nach dem Operator <<<
einen Bezeichner und dann eine neue Zeile an.
Als nächstes folgt die Zeichenfolge selbst.
Verwenden Sie abschließend die zuvor definierte Kennung als Endmarkierung.
angegebene Bezeichner muss sich in der ersten Spalte der Zeile befinden, was bedeutet, dass der Bezeichner nicht eingerückt werden darf und die Zeile keine anderen Zeichen außer möglicherweise einem Semikolon (;) enthalten darf.
Heredocs-Strukturen können nicht zum Initialisieren von Klasseneigenschaften verwendet werden. Ab PHP 5.3 funktioniert diese Einschränkung nur, wenn das Heredoc Variablen enthält.
Die Heredoc-Struktur ähnelt einer Zeichenfolge in doppelten Anführungszeichen ohne doppelte Anführungszeichen, und die Escape-Regeln sind die gleichen wie bei doppelten Anführungszeichen.
Nowdoc-Struktur
Dienowdoc-Struktur ähnelt der von heredoc, mit der Ausnahme, dass der Bezeichner nach dem Operator <<<
in einfache Anführungszeichen gesetzt werden muss.
就象heredoc结构类似于双引号字符串,nowdoc结构是类似于单引号字符串的。nowdoc中不进行解析操作。这种结构很适合用于嵌入PHP代码或其它大段文本而无需对其中的特殊字符进行转义。nowdoc结构可以用在任意的静态数据环境中,最典型的示例是用来初始化类的属性或常量。
变量解析
变量解析有两种语法规则,一种是简单规则,一种是复杂规则。简单规则最常用、最方便,这里详细学习一下复杂语法规则。复杂规则语法的显著标记是用花括号包围的表达式。
复杂语法不是因为其语法复杂而得名,而是因为它可以使用复杂的表达式。 由于{无法被转义,只有$紧挨着{时才会被识别。
存取和修改
可以以数组形式访问字符串,用超出字符串长度的下标写入将会拉长该字符串并以空格填充。非整数类型下标会被转换成整数。写入时只用到了赋值字符串的第一个字符。用空字符串赋值则赋给的值是NULL字符。PHP的字符串在内部是字节组成的数组。因此用花括号访问或修改字符串对多字节字符集很不安全。
字符串可以用 '.'(点)运算符连接起来,注意 '+'(加号)运算符没有这个功能。
一个布尔值boolean的TRUE被转换成string的"1"。boolean的FALSE被转换成""(空字符串)。字符串转换为数值,该字符串的开始部分决定了它的值。如果该字符串以合法的数值开始,则使用该数值。否则其值为 0(零)。
PHP的优势就体现在字符串处理的方便上,对于string的操作有很多有用的函数,可以运用各种函数,还有正则表达式。
PHP 并不特别指明字符串的编码,字符串会被按照该脚本文件相同的编码方式来编码。因此,操作文本的函数必须假定字符串是如何编码的。不幸的是,PHP关于此的函数有很多变种,关于PHP的字符串处理函数还需多加学习。
array数组
PHP中的数组实际上是一个有序映射,映射是一种把values关联到keys的类型。
可以用array()语言结构来新建一个数组。它接受任意数量用逗号分隔的“键(key)=>值(value)对”。自5.4起可以使用短数组定义语法,用[]替代array()。key可以是integer或者string,value可以是任意类型。
key会有如下的强制转换和规则:
<code><?php $a = array('20' => 'a', '02' => 'b'); var_dump($a);</code>
通过上面的规则可知,这段代码的输出结果如下:
<code>array (size=2) 20 => string 'a' (length=1) '02' => string 'b' (length=1)</code>
如果给出方括号但没有指定键名,则取当前最大整数索引值,新的键名将是该值加上1(但是最小为0)。要删除某键值对,对其调用unset()
函数,该函数允许删除数组中的某个键,但要注意数组将不会重建索引。
<code><?php $a = array('a', 'b' => 'b'); $a[] = 'c'; var_dump($a); unset($a[1]); var_dump($a);</code>
对于上面这段程序,输出为:
<code>array (size=3) 0 => string 'a' (length=1) 'b' => string 'b' (length=1) 1 => string 'c' (length=1) array (size=2) 0 => string 'a' (length=1) 'b' => string 'b' (length=1)</code>
应该始终在用字符串表示的数组索引上加上引号。例如用$foo['bar']
而不是$foo[bar]
。此代码中有一个未定义的常量(bar)而不是字符串('bar'-注意引号),而 PHP 可能会在以后定义此常量。
foreach控制结构是专门用于数组的。它提供了一个简单的方法来遍历数组。
下面的示例程序,通过读取目录填充数组,这里涉及到几个函数的使用。
<code><?php $handle = opendir('.'); while(false !== ($file = readdir($handle))) { $files[] = $file; } closedir($handle); var_dump($files);</code>
对于任意integer,float,string,boolean和resource类型,如果将一个值转换为数组,将得到一个仅有一个元素的数组,其下标为 0,该元素即为此标量的值。
object对象
要创建一个新的对象 object,使用 new 语句实例化一个类。
如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,将会创建一个内置类 stdClass 的实例。如果该值为 NULL,则新的实例为空。数组转换成对象将使键名成为属性名并具有相对应的值。对于任何其它的值,名为 scalar 的成员变量将包含该值。
<code><?php class foo { function do_foo() { echo 'Doint foo.'; } } $bar = new foo; $bar->do_foo(); var_dump($bar); $obj = (object) 'hello'; var_dump($obj);</code>
上面的示例程序输出结果为:
<code>Doint foo.object(foo)[1] object(stdClass)[2] public 'scalar' => string 'hello' (length=5)</code>
resource资源类型
资源resource是一种特殊变量,保存了到外部资源的一个引用。资源使用的所有外部资源都会被垃圾回收系统释放,很少需要手工释放内存。但是,持久数据库连接比较特殊,它们不会被垃圾回收系统销毁。
NULL
NULL类型只有一个值,就是不区分大小写的常量NULL。
callback回调类型
第一次接触到这个概念,有点陌生。
自PHP 5.4起可用callable类型指定回调类型callback。
手册示例程序中使用了很多call_user_func
函数,先把这函数理一下。call_user_func
把第一个参数作为回调函数(callback),并且将其余的参数作为回调函数的参数。返回回调函数的返回值,如果错误则返回FALSE。
回调函数可以是简单函数、对象方法、静态类方法,回调函数的几种使用方法如下所示:
<code><?php function my_callback_function() { echo 'hello, world.'; } call_user_func('my_callback_function');</code>
<code><?php class MyClass { static function myCallbackMethod() { echo 'Hello, world.'; } } call_user_func(array('MyClass', 'myCallbackMethod'));</code>
<code><?php class MyClass { static function myCallbackMethod() { echo 'Hello, world.'; } } $obj = new MyClass; call_user_func(array($obj, 'myCallbackMethod'));</code>
<code><?php class MyClass { static function myCallbackMethod() { echo 'Hello, world.'; } } call_user_func('MyClass::myCallbackMethod');</code>
<code><?php class A { public static function who() { echo "A\n"; } } class B extends A { public static function who() { echo "B\n"; } } call_user_func(array('B', 'parent::who'));</code>
除了普通的用户自定义函数外,create_function()
可以用来创建一个匿名回调函数。
类型转换
PHP是弱类型语言,变量类型根据使用该变量的上下文所决定的。
(全文完)
以上就介绍了类型 - PHP手册笔记,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。