回覆列表
  • 1 # 程式設計師小助手

    引言

    我們已經習慣在框架裡編寫類庫介面,使用面向物件的方式構建規模以上的應用程式。但是還有很多機會,時時刻刻與PHP陣列打交道。

    PHP版本迭代並加入的物件操作特性非常豐富。今天我們來說一說最基礎的PHP空物件,怎麼使用,以及注意事項。

    學習時間

    如果是陣列,我們可能這樣儲存資料:

    $aVal = array();

    $aVal[key1][var1] = "something";

    $aVal[key1][var2] = "something else";

    那麼有沒有辦法像下面這樣操作資料呢?

    (object)$oVal = "";

    $oVal->key1->var1 = "something";

    $oVal->key1->var2 = "something else";

    當然了,這個是虛擬碼。PHP中自帶了 stdClass 物件,宣告空物件使用下面的方法:

    $x = new stdClass();

    stdClass是預設的PHP物件。stdClass沒有屬性,方法或父級。它不支援魔術方法,並且不實現任何介面。

    當將標量或陣列轉換為Object時,將獲得stdClass的例項。只要需要通用物件例項,就可以使用stdClass。

    建立 stdClass 的示例,可以使用下面的任意方式:

    $x = new stdClass;

    $y = (object) null; // 同上

    $z = (object) "a"; // 建立屬性 "scalar" = "a"

    $a = (object) array("property1" => 1, "property2" => "b");

    你需要格外注意:

    stdClass不是基類! PHP類不會自動從任何類繼承。 所有類都是獨立的,除非它們顯式擴充套件了另一個類。 在這方面,PHP與許多面向物件的語言不同。

    你無法在程式碼中定義名為“ stdClass”的類。 該名稱已被系統使用。 你可以定義一個名為“Object”的類。也可以定義一個擴充套件stdClass的類,但不會獲得任何好處,因為stdClass不執行任何操作。

    再舉一個例子:

    class CTest { public $property1; } $t = new CTest; var_dump($t instanceof stdClass); // false var_dump(is_subclass_of($t, "stdClass")); // false echo get_class($t) . "\n"; // "CTest" echo get_parent_class($t) . "\n"; // false (no parent)

    注意,PHP的類是獨立存在的,上面的 CTest 類也絕不是繼承自 stdClass 物件。

    寫在最後

    透過本文,你應該收穫一個重要的概念,那就是,PHP 的類除非手動嚴格指定繼承類,否則都是獨立存在的。

    同時,PHP 提供了標準的 stdClass 物件用於構建空物件。操作資料時可以不用像陣列那樣了。但是,拋開陣列,你講很大程式上享受不到PHP帶來的資料操作便利。

    Happy coding :_)

  • 中秋節和大豐收的關聯?
  • 雅思口語方面應該如何去備考呢?