首頁 php教程 php手册 PHP5權威程式設計閱讀學習筆記 附電子書下載_php基礎

PHP5權威程式設計閱讀學習筆記 附電子書下載_php基礎

May 16, 2016 am 09:00 AM
php5

PHP 5 權威程式設計(PHP 5 Power Programming) PDF下載位址/books/28207.html 

PHP4中,不使用__construct()作為建構子的名字,必須使用類別的名字定義一個方法,就像在C 中一樣。
PHP5中,使用新的統一的建構子命名方式:__construct(),當然,使用類別名稱同樣也是可以的。
但是,你如果兩個同時使用的話,系統預設會使用__construct()的形式。

複製程式碼 程式碼如下:

class Person{
//PHP4中的方法
public function Person(){
echo "PHP4中的方法";
}
//PHP5建議使用的方法
public function __construct(){
echo "PHP5建議使用的方法";
}
public function say(){
}
}
$p1=new Person();
?>

在建構函式中不能回傳值,所以從建構函式內產生一個錯誤最常用的做法就是拋出一個例外。
程式碼如下:
複製程式碼 程式碼如下:

class Person{
private $_age;
public function __construct($age){
try {
if ($age$this->_age=$age;
}else {
throw new Exception("您輸入的年齡過大");
}
}catch (Exception $e){
echo $e->getMessage();
}
}
}
$p1=new Person(121);
?>

存取控制
物件屬性的存取保護是OOP的關鍵範例
Public:可以在任何地方被存取
Protected:類別成員可以被其所在類別的子類別和父類別從物件內部的方法存取
Private:類別成員只能被其所在類別從物件內部的方法訪問,而無法從繼承類別的成員中存取。因為私人成員不會被繼承,所以兩個相關的類別完全可以分別宣告一個名字相同的私有變數。
也就是兩個類別都只能看到自己的私有屬性,私有成員之間是沒有關係的。
範例:
複製程式碼 程式碼如下:

/**
* Define MyClass
*/
class MyClass
{
public $ public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function printHello()
{
echo $this->public; echo $this->protected;
echo $this->private;
}
}
$obj = new MyClass();
echo $obj->public; //這行能被正常執行
echo $obj->protected; // 這行會產生一個致命錯誤
echo $obj->private; // 這行也會產生一個致命錯誤
$obj ->printHello(); // 輸出Public、Protected 和Private
/**
* Define MyClass2
*/
class MyClass2 extends MyClass
{
// 可以對public和protected 進行重定義,但private 而不能
protected $protected = 'Protected2';
function printHello()
{
echo $this->public;
echo $this-> protected;
echo $this->private;
}
}
$obj2 = new MyClass2();
echo $obj->public; // 這行能正常執行echo $obj2->private; // 未定義private
echo $obj2->protected; // 這行會產生一個致命錯誤
$obj2->printHello(); // 輸出Public、Protected2 ,但不會輸出Private

注意:類別中的方法都必須使用關鍵字public、protected 或private 進行定義。如果沒有設定這些關鍵字,則該方法會被設定成預設的 public。
靜態方法
靜態方法可以不建立物件實例就透過類別名稱::靜態方法來調用,也可以在一個物件實例中透過$this->靜態方法或self: :靜態方法來呼叫。
複製程式碼 程式碼如下:

class Foo
{
public static $my_static = 'foo';
public static function staticValue() {
return self::$my_static;//在類別中存取靜態成員使用self關鍵字
} }
$obj=new Foo();
echo $obj->staticValue();//方式一
echo Foo::staticValue();//方式二
?>

克隆物件
在PHP4中,new一個物件的時候,回傳的是「物件本身」
在PHP5中,new一個物件的時候,回傳的是「指向物件的句柄」
這意味著在PHP5中,將物件實例($obj1)賦值給另一個變數($obj2)的時候,兩個物件都是指向同一塊記憶體區域。
例如:
複製程式碼 程式碼如下:

class test{
public $str;
}
$obj1=new test();
$obj1->str="obj1";
$obj2= $obj1;
$obj2->str="obj2";
echo $obj1->str;//將輸出「obj1」
?>

由於$obj1和$obj2指向的是同一塊記憶體區域,因此使用任何一個物件修改其中的成員變數的值的時候,都會影響到另一個物件。
但是在有些時候,我們確實需要複製一個物件的拷貝(兩塊相互獨立的記憶體區域),這時候可以使用語言命令clone
參考下面的例子;
複製程式碼 程式碼如下:

class test{
public $str;
}
$obj1=new test();
$obj1->str="obj1";
$obj2= clone $obj1;
$obj2->str="obj2";
echo $obj1->str;//將輸出「obj2」
?>

parent::和self::
self::指向目前類,而且通常用來存取靜態成員,方法和常數
parent::指向父類,而且它經常被用來呼叫父類的建構子和方法,也可以用來存取父類的成員和常數
注意:你應該使用parent::而不是父類的某個具體的名字,因為這樣可以令你方便的更改你的類別的層次。
範例:
複製程式碼 程式碼如下:

class Father{
public function __construct(){
echo "呼叫父類別的建構子
";
}
}
class Son extends Father {
public function __construct (){
parent::__construct();//方式一
// Father::__construct();//方式二
echo "呼叫子類別的建構子";
}
}
$son=new Son();
?>

結果:
呼叫父類別的建構子
呼叫子類別的建構子
推薦使用方式一,原因上面已經說了。
instanceof實例
複製程式碼 程式碼如下:

class Rectangle {
public $name=__CLASS__;
}
class Square extends Rectangle {
public $name=__CLASS__;
}
class Circle{
public $name=__CLASS__;
}
function checkIfRectangle($shape){
if ($shape instanceof Rectangle ){
echo $shape->name;
}else {
echo "該物件不是Rectangle類別的實例";
}
}
checkIfRectangle(new Square());//輸出:Square
checkIfRectangle(new Circle());/ /輸出:該物件不是Rectangle類別的實例
?>

註:__CLASS__是一個特殊的常數,用來儲存目前類別的名字
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

php5和php8有什麼差別 php5和php8有什麼差別 Sep 25, 2023 pm 01:34 PM

php5和php8的差異在效能、語言結構、型別系統、錯誤處理、非同步程式設計、標準函式庫函數和安全性等方面。詳細介紹:1、效能提升,PHP8相對於PHP5來說在效能方面有了巨大的提升,PHP8引入了JIT編譯器,可以對一些高頻執行的程式碼進行編譯和最佳化,從而提高運行速度;2、語言結構改進,PHP8引入了一些新的語言結構和功能,PHP8支援命名參數,允許開發者透過參數名稱而不是參數順序等等。

php5如何改80端口 php5如何改80端口 Jul 24, 2023 pm 04:57 PM

php5改80埠的方法:1.編輯Apache伺服器的設定檔中的連接埠號碼;2、輯PHP的設定檔以確保PHP在新連接埠上運作;3、重新啟動Apache伺服器,PHP應用程式將開始在新的連接埠上運行。

php5沒有監聽9000埠如何解決 php5沒有監聽9000埠如何解決 Jul 10, 2023 pm 04:01 PM

php5沒有監聽9000埠解決方法步驟:1、檢查PHP-FPM設定檔;2、重啟PHP-FPM服務;3、關閉防火牆或設定埠轉送;4、檢查其他程序是否佔用9000埠。

php7和php5語法有什麼差別 php7和php5語法有什麼差別 Jul 10, 2023 pm 03:25 PM

php7和php5語法區別有:1、PHP7引入了嚴格的類型聲明,而PHP5變量的類型是隱式的;2、PHP7引入了對標量類型聲明的支持,而PHP5並沒有;3、PHP7引入了NULL合併運算符,而PHP5檢查一個變數是否存在且不為null,需要使用條件語句;4、PHP7加入了新的比較運算子“<=>”,而PHP5並沒有;5、PHP7引入新特性匿名類,而PHP5並沒有。

php7的版本和5有哪些不同 php7的版本和5有哪些不同 Sep 15, 2023 pm 04:11 PM

php7的版本和5的不同有性能提升、标量类型声明、返回值类型声明、异常处理改进、匿名类、语法改进、新的运算符、增强的错误处理和移除了一些旧特性等。详细介绍:1、性能提升,PHP7引入了全新的Zend引擎,名为Zend Engine 3.0,带来了显著的性能提升,PHP7的性能比PHP5提高了大约两倍,这主要是通过改进了内存管理、优化了函数调用和异常处理、增强了垃圾回收等等。

php5沒有監聽9000埠怎麼解決 php5沒有監聽9000埠怎麼解決 Mar 21, 2023 pm 04:32 PM

在使用PHP5時,有些使用者可能會遇到無法監聽連接埠9000的情況。這時,我們需要進行一些配置和排查工作來解決這個問題。

php5怎麼改80端口 php5怎麼改80端口 Mar 21, 2023 pm 04:32 PM

如果你是網站管理員,你可能會碰到需要將 PHP5 的連接埠從預設的 80 連接埠進行修改的情況。這個過程可能會稍有進急,但是只要跟著以下步驟操作,一定會很容易地完成。

探討PHP7和PHP5在語法上的差異 探討PHP7和PHP5在語法上的差異 Mar 21, 2023 pm 07:10 PM

PHP是一種廣泛使用的伺服器端程式語言,被用於開發動態網站和應用程式。近些年,PHP7的發布引起了一些關注。 PHP7比之前的版本(如PHP5)有許多改進和最佳化。在本文中,我們將探討PHP7和PHP5在語法上的差異。

See all articles