PHP的基本數據類型

PHP提供了九種類型的值或稱爲數據類型。

四種標量型(單值):整型,浮點型,字符串和布爾型。

兩種複合類型(集合):數組、對象。

三種種特殊類型:資源類型、NULL類型、callable類型(PHP 5.4之前的callback僞類型)


1. 標量型

1.1 integer整型

//長度與C編譯器的長數據類型的範圍相當;

//整型值可以使用十進制,十六進制,八進制或二進制表示,前面可以加上可選的符號(- 或者 +)。

$i1 = 123;<span style="white-space:pre">	</span>
$i2 = 0b111;<span style="white-space:pre">	</span>//二進制前加 0b , <span style="white-space: pre;">二進制表達的 integer 自 PHP 5.4.0 起可用。	</span>
$i3 = 0123;<span style="white-space:pre">	</span>//八進制前加 0(零)
$i4 = 0x123;<span style="white-space:pre">	</span>//十六進制前加 0x

echo '十進制:'.$i1."\n";
echo '二進制:'.$i2."\n";
echo '八進制:'.$i3."\n";
echo '十六進制:'.$i4."\n";
可以使用is_int() 函數判斷一個值是否是一個整型

if(is_int(0x123)){
    echo 'is integer';
}else {
    echo 'not integer';
}
//可以通過 (integer)$x 或 intval($x)函數將不同類型轉換成整型

echo (integer)false ."_".intval(123.321);

1.2float  浮點數(通常簡稱實數)

//長度與C編譯器的雙精度數據類型的範圍一樣;

$f1 = 3.14;
$f2 = -3.1400;
$f3 = 0.314E1;  //科學計數法
$f4 = 314E-2;

echo $f1."\n";
echo $f2."\n";
echo $f3."\n";
echo $f4."\n";

//使用is_float()函數(或其別名is_real())來測試一個值是否是浮點數

if (is_float(3.14) && is_real(314E-2)) {
    echo "All is float\n";
}
//浮點值只是數的近似表示,所以要避免浮點值之間直接比較,通常比較前幾位

if(intval(3.1415926 * 100) == (integer)(pi() * 1000)) {
    echo 'equal';
}else {
    echo 'not equal';
}

1.3boolean 布爾型

//和大多數編程語言一樣,PHP定義了一些值爲true,一些爲false.

//在PHP中,以下值的計算結果(轉換爲boolean是的結果)爲 false

  • #關鍵字 false
  • #整型 0
  • #浮點數 0.00
  • #空字符串(“”)和字符串 “0”
  • #空數組
  • #空對象
  • #null值
class ccc{}
$c;
$c = new CCC;
if($c){
    echo '"$c" is alive'."\n";
    unset($c);<span style="white-space:pre">	</span>//銷燬變量
}
$tmp;
$arr = array();
if( 0 || 0.00|| "" || "0" || null || false || $tmp || $arr || $c) {
    echo "someone's value is true";
}else {
    echo "value: all false and \$c is death \n";
}

1.4 string 字符串

//字符串是一個任意長度的字符序列,PHP中字符串字面量由單引號、雙引號或界定符分隔:

$str1 = "str1"; //雙引號內容經過PHP語法分析器解析
$str2 = str1;
$str3 = 'str3';//單引號不被解析
echo "$str1\n<br>";
echo "$str2\n<br>";
echo $str3.'_$str3';
echo "\n<br>".'\n<br>';     //字符串之間用 “.” 拼接

//界定符 <<<   (結束標識符必須單獨另起一行,並且不允許有空格。在標識符前後不允許有其他符合或字符)
$str4 = '顯示該行內容';
echo <<<std
\n這和雙引號沒有什麼區別
\$str4的內容爲:$str4    //雙引號內關鍵字符必須用轉義符

std;

//根據下標直接取得字符串具體位置字符
echo string[0]."_"."string"[1]."_".'string'[2];
echo "\n";
//直接使用 == 比較兩個字符串是否相等

if("aaa" == "aaa"){
    echo "equal \n";
}
//判斷一個變量是否爲字符串
if (is_string("123455")){
    echo "it is a string \n";
}


2. 複合類型

2.1 array 數組

數組保存一組值,這些值可以由下標或一些標識性的名稱(字符串)來確定關聯

$tmpInt = 123;

$arr1 = array(1, 12, $tmpInt, "雙引號", '單引號', false, true);
echo "$arr1[0]_$arr1[1]_$arr1[2]_$arr1[3]_$arr1[4]";
echo "\n";
echo "$arr1[5]_$arr1[6]"; //數組中 false同樣不輸出, true 轉換成1
echo $arr1[7];//越界不報錯,也不存在任何值
echo "\n";

//若採用key-value方式定義,則只存在key值下標,不存在默認的數值下標
$arr2 = array("int" => $tmpInt,
                "str" => "字符串");
echo "$arr2[int]_$arr2[0]_$arr2[str]_$arr2[1]";
echo "\n";
//
$arr3[0] = 123;
$arr3[int] = 1234;
echo "$arr3[0] _ $arr3[int]";

2.2 object 對象

PHP也支持面向對象編程(OOP)。

//類的定義
class Student {
    public $name = "";
    function  setName($newName = NULL){
        if(!is_null($newName)){
            $this->name = $newName;
        }
        return $this->name;
    }
}

//類的創建以及方法調用
$stu = new Student;
$stu->setName("xyy");
echo "Hi,$stu->name";

3. 特殊類型

3.1 resource資源類型

許多模塊提供一些函數用於處理外部事物。

#數據庫連接

#文件

#圖片

#等等

每個活動的資源都有一個唯一的標識符,每個標識符對應着PHP內部結構表中的一個數字,這個表中報錯了有關所有活動的資源信息。PHP在這個表中保存每個資源的信息,以及在這個代碼中引用的資源數碼。當最後一個引用資源銷燬,創建該資源的擴展將被調用,用於釋放內存、關閉連接等。

$con = mysql_connect("addr","name","password");
if (is_resource($con)) {
    echo 'it is a resource';
}

3.2 NULL 類型

NULL數據類型只有一個值。這個值可以通過不區分大小寫的關鍵字NULL獲得。

NULL值表示一個變量沒有值(類似於Python中的None)

echo is_null($nulllll);


3.3 callable回調類型

回調是一些函數或對象的方法被另一些函數的調用,如call_user_func().

回調也可以通過create_function()方法和閉包創建

//下列示例代碼取自PHP官方文檔
// An example callback function
function my_callback_function() {
        echo "Hello \n";
}

// An example callback method
class MyClass {
    static function myCallbackMethod() {
        echo "Hi \n";
    }
}

// Type 1: Simple callback
call_user_func('my_callback_function');

// Type 2: Static class method call
call_user_func(array('MyClass', 'myCallbackMethod'));

// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));

// Type 4: Static class method call (As of PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');

// Type 5: Relative static class method call (As of PHP 5.3.0)
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')); // A

/*
 * 示例二:
 */
// Our closure
$double = function($a) {
    return $a * 2;
};

// This is our range of numbers
$numbers = range(1, 5);

// Use the closure as a callback here to
// double the size of each element in our
// range
$new_numbers = array_map($double, $numbers);

print implode(' ', $new_numbers);

//判斷是否爲回調類型

$double = function($a) {
    return $a * 2;
};
if(is_callable($double)) {
    echo 'callable';
}




發佈了16 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章