如何學習php中的類別
類別的結構: 類別的內部能可能有三種東西,就是常數(constant),屬性(property)和方法(method),功能可以理解成類別外部的常數,變數和函數。
程式碼如下:
<?php class TEST { const NAME = 'value'; // 常量 public $name = 'value'; // 属性 public function name() // 方法 { echo 'value'; } } ?>
在這之中,屬性和方法又可以使用public, protected, private三個不同的關鍵字來將屬性和方法的作用範圍來做進一步的區分,帶有private關鍵字的屬性和方法,只有所在的類別中的方法才能呼叫;帶有protected關鍵字的屬性和方法,除了自己以外,自己的父類別和子類別中的方法也可以呼叫;帶有public關鍵字的屬性和方法,則可以從實例化以後的物件中進行調用,這樣做最大的好處為所有的屬性和方法增加了一些描述的特徵,更便於整理和組織程式碼的結構。 const關鍵字先跳過,跟後面的static講。
static關鍵字是有別於public, protected, private的另一類型關鍵字(因此可以和public, protected, private疊加起來使用):
#程式碼如下:
<?php class TEST { public static function name() { echo 'value'; } } ?>
有static關鍵字的方法,可以在不對類別進行實例化的情況下直接透過「::」符號調用,和public, protected, private的搭配,也可以讓呼叫區分權限,但是一般都是和public搭檔,前面提到的常數關鍵字const,應該就是public static類型的,因此只能透過self::NAME,TEST::NAME這樣的形式呼叫常數,後面的__construct,__destruct等方法,都是屬於static。
類別的結構部分,最後介紹的兩個關鍵字是abstract和final,abstract關鍵字表示這個類別必須被他的子類別覆寫,而final關鍵字表示這個類別必須不能被他的子類覆寫,這兩個關鍵字的功能是正好相反的,帶有abstract的方法被成為抽象方法,帶有抽象方法的類,成為抽象類,這個在後面還有介紹。
類別的使用:
類別的使用主要有兩種方法,一種是使用new關鍵字,另一種是使用「::」符號:
PHP程式碼
程式碼如下:
<?php class TEST { public static function name() { echo 'value'; } } //方法1:使用new关键字 $test = new TEST; $test->name(); //方法2:使用“::”符号 TEST::name(); ?>
(1):使用new關鍵字成為實例化,上面的$test就是一個透過TEST類別實例化而產生的對象,$test->name()稱為呼叫$test對象的name方法。
(2):使用new關鍵字使用類別的時候,可以使用$this來指涉類別本身。
(3):使用「::」符號的前提是方法必須是帶有static關鍵字的,使用new關鍵字時,被呼叫的方法,必須帶有public關鍵字(一個方法如果不帶public , protected, private中的任何一個關鍵字,則預設為public)
(4):同一個類別可以透過new關鍵字被實例成多個不同的對象,但是彼此之間的是隔離的;“ ::”符號在使用的時候,方法在多次使用之間,是共享的:
PHP代碼
#代碼如下:
<?php class TEST1 { public $name = 0; public function name() { $this->name = $this->name + 1; } } $test1 = new TEST1; $test2 = new TEST1; $test1->name(); //$name1 == 1 $test2->name(); //$name1 == 1 /*--------------------------------------------*/ class TEST2 { public static $name = 0; public static function name() { TEST2::$name = TEST2::$name + 1; } } TEST2::name(); // $name == 1 TEST2::name(); // $name == 2 ?>
類別的關係:
類別與類別之間的關係,主要有抽象,介面與繼承:
PHP程式碼
程式碼如下:
<?php abstract class TEST1 // 抽象 { abstract public function name1(); public function name2() { } } class TEST2 extends TEST1 implements TEST3 // 继承 { public function name1() { } } interface TEST3 // 接口 { public function name2(); } ?>
(1)帶有abstract關鍵字的類別是抽象類,帶有abstract關鍵字的方法是抽象方法,抽象類別中的抽象方法,必須在子類別中被覆寫。
(2)有interface關鍵字的類,就是接口,接口不允許實現任何的方法,接口中所有的方法,都必須在子類中被覆寫。
(3)有 classA extends classB 或 classA implements classB 字樣的就是繼承,extends表示繼承另一個類,implements表示繼承另一個接口,一次只能extends一個類,但是可以implements多個介面。
(4)抽象類,接口,以及最終繼承並實現的方法,都必須是public的。
在繼承的過程中,子類別會覆寫父類別的同名方法,這個時候如果需要在子類別中呼叫父類別的方法,可以使用parent關鍵字或類別名稱加上「:: 」符號呼叫:
PHP程式碼
程式碼如下:
<?php class TEST1 extends TEST2 { public function name() { echo parent::name2(); echo TEST2::name2(); } } class TEST2 { public function name2() { echo 'value2'; } } $test = new TEST1; $test->name(); ?>
這裡再解釋一下「::」方法在類別中的作用,一個作用是在沒有實例化的情況下呼叫常數(其實也理解成static就可以了),static屬性和方法,再一個是在類別的內部,透過self,parent和類別名稱建立便捷的呼叫通道。
物件於物件之間的關係,主要是「==」等於,「===」全等於,不等於和clone:
PHP程式碼
<?php class TEST { public function name() { } } $test1 = new TEST; $test2 = new TEST; $test3 = $test1; echo $test1 == $test2 ? true : false; // true echo $test1 == $test3 ? true : false; // true echo $test2 == $test3 ? true : false; // true echo $test1 === $test2 ? true : false; // false echo $test1 === $test3 ? true : false; // true echo $test2 === $test3 ? true : false; // false ?>
(1)两个类只要拥有相同的属性和方法,就是“==”等于。
(2)两个类必须是指向的同一个对象,才能是“===”全等于。
clone比较特殊,在上面的例子中,$test3 = $test1的过程并不是给了 $test3 一份 $test1 对象的拷贝,而是让 $test3 指向了 $test1,如果一定要获得一份$test1的拷贝,就必须使用clone关键字:
PHP代码
代码如下:
<?php $test3 = clone $test1; ?>
类的钩子:
__autoload:
是一个函数名,也是唯一一个在类的外部使用的钩子,在实例化一个对象的时候,如果没有预先载入类,就会调用这个钩子。
__construct
在类被实例话的时候,被调用的钩子,可以做一些初始化的操作。
__destruct
在类被销毁的时候,被调用的钩子。
__call
当对象试图调用一个不存在的方法的时候,被调用的钩子
__sleep
当使用serialize()函数对一个类进行序列话操作的时候,会调用这个钩子
__wakeup
当使用unserialize()函数对一个类进行反序列话操作的时候,会调用这个钩子
__toString
当一个对象将被转变为字符串的时候,会调用这个钩子(比如echo的时候)
__set_state
当调用var_export()函数操作一个类的时候,会调用这个钩子
__clone
当使用clone关键字对一个类进行拷贝操作的时候,会调用这个钩子
__get
在获取一个类中的属性值的时候,会调用这个钩子
__set
在设置一个类中的属性值的时候,会调用这个钩子
__isset
在使用isset()函数对类中的属性值进行判定的时候,会调用这个钩子
__unset
在使用unset()函数销毁一个属性值的时候,会调用这个钩子
类的小技巧:
在实例话一个类的时候,可以使用这样的形式给__construct钩子传递参数:
PHP代码
代码如下:
<?php class TEST { public function __construct($para) { echo $para; } } $test = new TEST('value'); // 显示 value ?>
foreach()函数可以用来对类或者对象中的属性进行遍历,遍历的时候会先判断public, protected, private的情况而显示:
PHP代码
代码如下:
<?php class TEST { public $property1 = 'value1'; public $property2 = 'value2'; public $property3 = 'value3'; public function name() { foreach($this as $key => $value) { print "$key => $value\n"; } } } $test = new TEST; foreach($test as $key => $value) { print "$key => $value\n"; } $test->name(); ?>
在给类中的方法传递参数的时候,可以对参数进行强制的判定,这里只支持对数组和对象的判定:
PHP代码
代码如下:
<?php class TEST1 { public function name( TEST2 $para ) { } } class TEST2 { } $test2 = new TEST2; $test1 = new TEST1; $test1->name('value'); // 会报错,因为这个参数必须是TEST2实例化以后的对象 $test1->name($test1); // 不会报错 ?>
兼容php4的语法:
php5的类是往下兼容php4的,这些php4时代的语法也得到了继承,但是并不建议在php5的环境中使用。
(1)使用var预设属性,会自动转换成public。
(2)使用类名作为构造函数,在没有__construct构造方法的情况下,会寻找和类名相同的函数作为构造函数。
以上是如何學習php中的類別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。
