天天看點

php7數組和對象效率,「基礎程式設計學習」 「PHP7數組詳解」:第1章 (8)數組和對象...

# 1.14 數組

講了7節了,終于說到重頭戲了。

數組,将關聯的資料,放在記憶體中。

舉一個例子,比如說一個班級,有一個班級号,班級名,描述,房間号,教導員,班級人數。可以存到一個數組内,這樣寫:

$class_array[0] = "CS122";// class number$class_array[1] ="Programming Concepts 1";// class name$class_array[2] ="Basic concepts of the PHP language.";// description$class_array[3] = "B123"; // room$class_array[4] = "Dr. Abraham Excell";// instructor$class_array[5] = 50;// number of students

上面這個數組,是随用随建的。用的時候指派,一般呢,我們明确知道的,用下面的方式書寫:

$class_array = array( 'CS122', 'Programming Concepts 1', 'Basic concepts of the PHP language.', 'B123', 'Dr. Abraham Excell', 50);

一目了然。大家看到,這個數組記憶體儲的有整型,有字元串,類型不一樣,都可以放在一起。這與我們在強類型語言内看到的,聲明數組之前,必須指定數組的長度,數組元素的資料類型,不一樣,不一樣,不一樣!

要不說PHP沒有真正的數組呢。PHP的數組,說白了,就是鍵值映射資料對。

php7數組和對象效率,「基礎程式設計學習」 「PHP7數組詳解」:第1章 (8)數組和對象...

把上面額數組,使用var_dump列印出來,看一下數組的結構。我們發現,數組是預設從0開始,使用正整數作為鍵,存儲資料的。

PHP的數組也的确是這樣的機制,它還支援明确指定數組的鍵,也就是鍵值對存儲。看下面的額資料:

$class_array["class number"] = "CS122";$class_array["class name"] = "Programming Concepts 1";$class_array["description"] = "Basic concepts of the PHP language.";$class_array["room"] = "B123";$class_array["instructor"] = "Dr. Abraham Excell";$class_array["number of students"] = 50;

這次,我們使用的鍵是字元串型。

我們同樣使用var_dump列印其内部結構。

php7數組和對象效率,「基礎程式設計學習」 「PHP7數組詳解」:第1章 (8)數組和對象...

鍵由字元串組成的。

上面的是一維數組,簡單數組。當然,數組也支援元素為數組,比如下邊這樣。

$class_array = array( array( 'CS122', 'Programming Concepts 1', 'Basic concepts of the PHP language.', 'B123', 'Dr. Abraham Excell', 50 ), array( 'CS123', 'Programming Concepts 2', 'Advanced concepts of the PHP language.', 'B124', 'Dr. Abraham Excell', 50 ));

這個是二維數組。後面章節再詳細說。

# 1.15 對象,屬性,和方法

PHP是一門面向對象的語言。類由屬性和方法組成。對象是類的執行個體。

自 PHP 5 起完全重寫了對象模型以得到更佳性能和更多特性。這是自 PHP 4 以來的最大變化。PHP 5 具有完整的對象模型。

類的通路控制

對屬性,或者方法的通路,通過再其前面添加關鍵字來實作。

一共有三種控制級别,public,private,protected。

public定義共有類成員,可以在任何地方被通路;

private定義私有類成員,隻能在定義的類内使用和通路,不能繼承,不能外部通路。

protected定義受保護的類成員,可以被自身,子類,和父類通路。

預設,是公有,屬性和方法。

說概念不直覺,來看例子。

php7數組和對象效率,「基礎程式設計學習」 「PHP7數組詳解」:第1章 (8)數組和對象...

先聲明一個類,然後用new關鍵字執行個體化出來一個對象。然後這個對象就繼承了類的所有屬性和方法。

因為有通路控制,是以隻有公有的方法和屬性,才能通路。private,protected的屬性和方法,是沒有權限通路到的。

php7數組和對象效率,「基礎程式設計學習」 「PHP7數組詳解」:第1章 (8)數組和對象...

上面是項目中的一個完整的類。使用var聲明的屬性,預設是public公有屬性。

特别i地,__construct()方法,是在該類執行個體化的時候,會執行其中的代碼。該方法接收一個$path參數,在執行個體化的時候,會進行傳入。

其他方法,因為沒有特别說明為public/private/protected,是以預設public。可外部通路。

下面看一下業務邏輯中,有都是如何使用這個類的。

$smarty = new template(ROOT_PATH . 'upgrade/templates/');

直接用new關鍵字,執行個體化。傳入一個字元串參數,在執行個體化的時候,會執行__construct()方法。接着$smarty就可以自由通路template類的所有公有屬性和方法了。

$smarty->assign('page_title', $position['title']); // 頁面标題$smarty->assign('ur_here', $position['ur_here']); // 目前位置$smarty->display('activity.dwt');

大家可以看到,遵循規則定義,使用類和對象,程式封裝的更為簡潔了。