php語法簡單,應用也非常好,而且類庫強大,確實能寫出很強大的服務器端。對於我這種只需要小功能服務器的人來說,再好不過了。
單純的說學習php,我覺得還是看手冊的好。花了幾天時間看了看語法,因為有編程基礎,所以現在看起來就比較快了。剛用php寫完一個簡單的服務器,當然是有目的,准備用來支持一個訂票系統的客戶端。下面是我學習過程的筆記。以後也好有個回顧。
當不存在某個類的對象時,可以通過作用域分辨符(::)來調用某個類中的方法;
訪問基類中的方法時可以寫成 parent::method();
serialize() 返回一個字符串,包含著可以儲存於 PHP 的任何值的字節流表示。
unserialize() 可以用此字符串來重建原始的變量值。
用序列化來保存對象可以保存對象中的所有變量。對象中的函數不會被保存,只有類的名稱。
序列化與反序列化同一個對象時,可以采用包含同一對象的定義文件方法來實現。
這是因為“new”默認並不返回引用,而返回一個拷貝。
php5
類與對象的特點:
visibility:可見性
屬性的訪問限度:public:任何地方都可以訪問到此屬性,
protect派生類或者父類可以訪問到這個屬性,或者任何定義了這個屬性的類內的某個項)
private:只有類內部才能訪問
A member declared as static can not be accessed with
an instantiated class object (though a static method can).
Static members and methods cannot be re-defined in subclasses.
(如果一個成員被定義為靜態的,那麼該成員不能被實例化對象訪問,
靜態成員不能在子類中被重新定義)。
靜態定義必須在訪問屬性之後,如:protect static
靜態方法可以不實例化調用,所以使用靜態方法時不能帶有$this參數。
靜態成員不能用->來訪問。
constant:常量關鍵字, const 用於定義 不可改變的常量,定義時不需要使用$符號。
定義方法一般為:const aconstant = 'constant';
php中gloabl定義的變量是在整個頁面中使用的,包括require包含的頁面和include包含的頁面。
抽象類:
抽象類不能實例化,任何帶有抽象方法的類必須定義為抽象類。
繼承抽象類的話,任何在抽象類中的抽象方法都必須重寫實現。這些方法的訪問限度只能
和抽象父類的方法的訪問限度相同或更低。
抽象類和抽象方法都使用 abstract作為關鍵字。
對象接口(object interface)
對象接口允許你規定哪些方法必須實現,而不是讓你定義哪些方法怎麼被捕捉。
對象接口使用 interface 關鍵字來定義。它是一個標准的類,但是它的任何方法都沒有被實現。
任何在接口對象中的方法都必須是公有的,這是接口對象必須遵循的。
實現一個接口必須使用implements標示,所以接口方法實現必須在一個類裡面。一個類可以實現多個接口。
重載:
迭代器:
迭代器可以訪問類裡面所有的公有對象成員。
實現PHP5裡面的迭代器接口,這樣可以允許你定義,對象怎麼被迭代訪問。
設計模式:
設計模式提供了一個良好的框架來實現一些功能組織。
工廠模式:在運行過程中實例化一個要求的對象。
單利模式:最明顯的一個例子就是:數據庫連接對象。下面是一個最好的單例模式范例:
Singleton Function
復制代碼 代碼如下:
<?php
class Example
{
// Hold an instance of the class
private static $instance;
// A private constructor; prevents direct creation of object
private function __construct()
{
echo 'I am constructed';
}
// The singleton method
public static function singleton()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
// Example method
public function bark()
{
echo 'Woof!';
}
// Prevent users to clone the instance
public function __clone()
{
trigger_error('Clone is not allowed.', E_USER_ERROR);
}
}
你還可以實現php5裡面的iteratoraggregate接口對象來定義自己的迭代方法。
魔術函數:
The function names __construct, __destruct (see Constructors and Destructors),
__call, __get, __set, __isset, __unset (see Overloading), __sleep, __wakeup,
__toString, __clone and __autoload are magical in PHP classes.
這些函數在存在於每一個php類中。你不要隨意使用__來定義函數,除非你真的想這個函數具有魔術功能。
__tostring()函數,這個函數將決定一個對象轉換為字符的時候將發生的事。
final關鍵字:
final關鍵字用來阻止應用final關鍵字聲明的類或者方法被繼承,被覆蓋。
參數類型強制:
可以在參數前面加上類名類控制傳入的參數類型。
require() 和 include() 除了怎樣處理失敗之外在各方面都完全一樣。
include() 產生一個警告而 require() 則導致一個致命錯誤。
換句話說,如果想在丟失文件時停止處理頁面,那就別猶豫了,用 require() 吧。
require_once() 語句在腳本執行期間包含並運行指定文件。
此行為和 require() 語句類似,
唯一區別是如果該文件中的代碼已經被包含了,
則不會再次包含。有關此語句怎樣工作參見 require() 的文檔。
PHP 有一個類型運算符:instanceof。instanceof 用來測定一個給定的對象是否來自指定的對象類。
代碼范例:
復制代碼 代碼如下:
<?php
class A { }
class B { }
$thing = new A;
if ($thing instanceof A) {
echo 'A';
}
if ($thing instanceof B) {
echo 'B';
}
?>
的 PHP 代碼段結束標記可以不要,有些情況下當使用輸出緩沖和
include() 或者 require() 時省略掉會更好些。
include() 就不是這樣,腳本會繼續運行。同時也要確認設置了合適的include_path。
__CLASS__ :指的是當前類。
異常處理,根據需要擴展異常處理類exception
require()語句包含並運行指定文件;