データの種類

WBOY
WBOYオリジナル
2016-06-23 13:26:16989ブラウズ

型の紹介

PHP は 8 つのプリミティブ データ型をサポートしています。

  • 4 つのスカラー型:

    • boolean (ブール、大文字と小文字を区別しない)

    • integer (整数)

    • float (浮動小数点、double とも呼ばれる)

    • 文字列(ストリング)

  • 2 つの複合タイプ:

    • array (配列)

    • object (オブジェクト)

  • 最後に、2 つの特別なタイプがあります:

    • リソース (リソース)

    • NULL (型なし)

式の値と型を確認したい場合は、var_dump() 関数を使用します。

<?php $a = array(1, 2, array("a", "b", "c"));var_dump($a);$b = 3.1;$c = true;var_dump($b, $c);

上記のコードは、var_dump() を通じて変数の関連情報を出力し、出力結果は次のようになります (PHP バージョン 5.5.12)。

そうですね

デバッグ用にわかりやすい型式を取得したいだけの場合は、gettype() 関数を使用してください。型を確認するには、gettype() を使用せず、is_type 関数を使用します。 is_type を使用してパラメータをフィルタリングします。

変数を特定の型に強制したい場合は、cast または settype() 関数を使用できます。変数は、その時点の型に応じて、特定の状況では異なる値を取る可能性があることに注意してください。

boolean ブール型

ブール値に変換すると、次の値は FALSE とみなされますことに注意してください:

  • 空の文字列、および文字列 "0"

  • 要素を含まない配列

オブジェクトである限り、戻り値は TRUE です。

次のプログラムは、ブール型変換についての理解を深めることができます。

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.1boolean true

integer 整数型

8進数表現を使用するには、数値の前に0(ゼロ)を追加する必要があります。

16進数表現を使用するには、数値の前に0xを追加する必要があります。
2進数表現を使用するには、数値の前に0bを追加する必要があります。
バイナリで表現された整数は、PHP 5.4.0 以降で使用できます。

整数値の語長は定数 PHP_INT_SIZE で表現でき、最大値は定数 PHP_INT_MAX で表現できます。

<?php var_dump((bool) array());  // boolean falsevar_dump((bool) "");  // boolean falsevar_dump((bool) "0");  // boolean falsevar_dump((bool) "00");  // boolean truevar_dump((bool) "false");  // boolean truevar_dump((bool) (new stdClass()));  // boolean truevar_dump((bool) ((object) array()));  // boolean true

上記プログラムの最後のステートメントで、8 進数を処理するときに奇妙なことが起こりました。これは、8 進数に不正な数値 (8 または 9 など) を渡すと、残りの桁が無視されるためです。

指定された数値が整数の範囲を超える場合、それは浮動小数点として解釈されます。同様に、演算結果が整数の範囲を超える場合は浮動小数点数が返されます。

PHP には整数の除算演算子はありません。 1/2 は float 0.5 を生成します。値は、小数部分を破棄して整数にキャストすることも、より適切に丸めるためにround()関数を使用することもできます。

マニュアルには、予期しない結果が生じる可能性があるため、未知の分数を整数にキャストしないようにと記載されています。

<?php var_dump(PHP_INT_SIZE);  // int 4var_dump(PHP_INT_MAX);  // int 2147483647var_dump(01090);  // int 8  八进制 010 = 十进制 8

このプログラムの出力は 7 です。浮動小数点数を決して信用しないでください。

float 型

特定の数学演算は、定数 NAN で表される結果を生成します。この結果は、未定義または浮動小数点演算で表現できない値を表します。この値と他の値を緩くまたは厳密に比較すると、結果は FALSE になります。

string string

string string は一連の文字で構成され、各文字は 1 バイトに相当します。実装は、バイトの配列にバッファ長を指定する整数を加えたものです。これは、PHP が 256 の文字セットのみをサポートできるため、Unicode をサポートしないことを意味します。中国語はどのように表示されますか?まず質問を書き留めてください。

文字列には 4 つの文法表現があります:

  • 一重引用符

  • 二重引用符

  • heredoc

  • nowdoc

  • Single quotes

単一引用符自体を表現するには、次のことが必要ですbe in エスケープするには、その前にバックスラッシュ () を追加します。

バックスラッシュそのものを表現するには、バックスラッシュ (\) を 2 つ使用します。

他のバックスラッシュはバックスラッシュ自体として扱われます。

ただし、一重引用符で囲まれた文字列にバックスラッシュが 1 つしかない場合、バックスラッシュも出力されます。これはなぜでしょうか。

二重引用符

はエスケープ文字を解析できます。最も重要な機能は、変数が解析されることです。

一重引用符と二重引用符の両方で、複数行の文字列入力がサポートされています。

ヒアドキュメント構造

この構造は過去のプログラミングではほとんど使用されませんでした。ここで詳しく学びましょう。

構造はおおよそ次のとおりです:

演算子 8022a377d3c54f123145973ede707664值(value)对”。自5.4起可以使用短数组定义语法,用[]替代array()。key可以是integer或者string,value可以是任意类型。

key会有如下的强制转换和规则:

  • 包含有合法整型值的字符串会被转换为整型。

  • 浮点数也会被转换为整型,意味着其小数部分会被舍去。

  • 布尔值也会被转换成整型。

  • null会被转换为空字符串,即键名null实际会被储存为""。

  • 数组和对象不能被用为键名。

  • 如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。

  • 如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。

<?php $a = array('20' => 'a', '02' => 'b');var_dump($a);

通过上面的规则可知,这段代码的输出结果如下:

array (size=2)  20 => string 'a' (length=1)  '02' => string 'b' (length=1)

如果给出方括号但没有指定键名,则取当前最大整数索引值,新的键名将是该值加上1(但是最小为0)。要删除某键值对,对其调用unset()函数,该函数允许删除数组中的某个键,但要注意数组将不会重建索引。

<?php $a = array('a', 'b' => 'b');$a[] = 'c';var_dump($a);unset($a[1]);var_dump($a);

对于上面这段程序,输出为:

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)

应该始终在用字符串表示的数组索引上加上引号。例如用$foo['bar']而不是$foo[bar]。此代码中有一个未定义的常量(bar)而不是字符串('bar'-注意引号),而 PHP 可能会在以后定义此常量。

foreach控制结构是专门用于数组的。它提供了一个简单的方法来遍历数组。

下面的示例程序,通过读取目录填充数组,这里涉及到几个函数的使用。

<?php $handle = opendir('.');while(false !== ($file = readdir($handle))) {    $files[] = $file;}closedir($handle);var_dump($files);

对于任意integer,float,string,boolean和resource类型,如果将一个值转换为数组,将得到一个仅有一个元素的数组,其下标为 0,该元素即为此标量的值。

object对象

要创建一个新的对象 object,使用 new 语句实例化一个类。

如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,将会创建一个内置类 stdClass 的实例。如果该值为 NULL,则新的实例为空。数组转换成对象将使键名成为属性名并具有相对应的值。对于任何其它的值,名为 scalar 的成员变量将包含该值。

<?php class foo {    function do_foo() {        echo 'Doint foo.';    }}$bar = new foo;$bar->do_foo();var_dump($bar);$obj = (object) 'hello';var_dump($obj);

上面的示例程序输出结果为:

Doint foo.object(foo)[1]object(stdClass)[2]  public 'scalar' => string 'hello' (length=5)

resource资源类型

资源resource是一种特殊变量,保存了到外部资源的一个引用。资源使用的所有外部资源都会被垃圾回收系统释放,很少需要手工释放内存。但是,持久数据库连接比较特殊,它们不会被垃圾回收系统销毁。

NULL

NULL类型只有一个值,就是不区分大小写的常量NULL。

callback回调类型

第一次接触到这个概念,有点陌生。

自PHP 5.4起可用callable类型指定回调类型callback。

手册示例程序中使用了很多call_user_func函数,先把这函数理一下。call_user_func把第一个参数作为回调函数(callback),并且将其余的参数作为回调函数的参数。返回回调函数的返回值,如果错误则返回FALSE。

回调函数可以是简单函数、对象方法、静态类方法,回调函数的几种使用方法如下所示:

  • 调用用户自定义的简单函数,以string类型传递其名称。

  • <?php function my_callback_function() {    echo 'hello, world.';}call_user_func('my_callback_function');
  • 调用类的静态成员方法,类及方法被作为数组传递,下标0包含该对象,下标1包含方法名。

  • <?php class MyClass {    static function myCallbackMethod() {        echo 'Hello, world.';    }}call_user_func(array('MyClass', 'myCallbackMethod'));
  • 调用已实例化的对象方法。

  • <?php class MyClass {    static function myCallbackMethod() {        echo 'Hello, world.';    }}$obj = new MyClass;call_user_func(array($obj, 'myCallbackMethod'));
  • 调用静态类方法。

  • <?php class MyClass {    static function myCallbackMethod() {        echo 'Hello, world.';    }}call_user_func('MyClass::myCallbackMethod');
  • 调用父类静态成员方法。

  • <?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'));

    除了普通的用户自定义函数外,create_function()可以用来创建一个匿名回调函数。

    类型转换

    PHP是弱类型语言,变量类型根据使用该变量的上下文所决定的。

    (全文完)

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。