PHP是一門服務器腳本語言,在Web開發(fā)中被廣泛應用,而PHP OOP即PHP面向對象編程,是其中非常重要的一塊。在PHP OOP中,有三大特性包括封裝、繼承和多態(tài)。下面我們將一一介紹它們。
封裝是PHP OOP的一大特性,也是OOP的一個基本概念。用一句話來概括封裝,即將數(shù)據(jù)和代碼包起來,使數(shù)據(jù)和代碼不受外部干擾。這樣處理后的代碼更加清晰、安全、易于維護和重用。例如,我們在一個Student類中設置一個私有屬性$name,這時即使在外部對它進行賦值,也會被拒絕。代碼如下:
class Student{ private $name; } $stu = new Student(); $stu->name = "LiMing"; /*error*/從上面的代碼中可以看出,我們在訪問$name時會收到一個錯誤信息,因為我們無權訪問類中用private進行封裝的屬性。這種方式的好處甚多,比如如果在修改類時只需修改某個私有變量,就可以提高代碼重用性和維護性。 繼承是OOP中經(jīng)常使用的一種機制,它指從已有的類中派生出新的類。派生出的新類繼承了原有類中的屬性和方法,并同時可以增加或修改父類中的屬性和方法。下面,我們舉一個典型的例子,說明繼承的簡單用法。
/*父類*/ class Person{ protected $name; public function __construct($name){ $this->name = $name; } public function sayHello(){ return "Hello, my name is ".$this->name; } } /*子類*/ class Student extends Person{ public function sayGoodbye(){ return "Goodbye, ".$this->name; } } $stu = new Student("LiMing"); echo $stu->sayHello()."從上面的代碼中可以看出,我們在子類中繼承了父類中的屬性和方法,同時增加了一個子類特有的方法sayGoodbye()。這種方式不僅可以提高代碼重用性、可重構性,還可以節(jié)省大量編寫代碼的時間。 多態(tài)是OOP中另一個非常有用的特性,它指同一個方法可以在不同的對象中呈現(xiàn)不同的實現(xiàn)方式。這樣的好處在于可以將多個對象統(tǒng)一對外提供同樣的接口,從而提高代碼的復用性、擴展性和可維護性。下面,我們用一個典型的例子,來闡述多態(tài)的用法。
"; /*Hello, my name is LiMing*/ echo $stu->sayGoodbye(); /*Goodbye, LiMing*/
abstract class Shape{ abstract public function getArea(); } class Square extends Shape{ private $length; public function __construct($length){ $this->length = $length; } public function getArea(){ return $this->length**2; } } class Circle extends Shape{ private $radius; public function __construct($radius){ $this->radius = $radius; } public function getArea(){ return $this->radius**2*pi(); } } $square = new Square(5); $circle = new Circle(4); echo "The area of the square is ".$square->getArea()."從上面的代碼中可以看出,我們定義了一個抽象類Shape,其中包含了一個抽象方法getArea()。然后我們又定義了兩個類:Square正方形和Circle圓形。這兩個類都是繼承自Shape類,并同時實現(xiàn)了這個抽象方法getArea()。在運行過程中,我們對這個接口有著清晰的認識,而具體實現(xiàn)的過程是由對象本身來執(zhí)行的。 綜上所述,封裝、繼承和多態(tài)是PHP OOP三大特性,應用廣泛。在項目開發(fā)中,通過使用這三大特性可以實現(xiàn)代碼的高聚合、低耦合,增加代碼的可讀性、可擴展性、可維護性。當然,對于初學者來說,具體的實現(xiàn)細節(jié)還需認真學習和掌握。
"; /*The area of the square is 25*/ echo "The area of the circle is ".$circle->getArea(); /*The area of the circle is 50.265482457438*/