php 類別與物件全面了解
目錄
PHP 類別與物件 全解析(一)
PHP 類別與物件全解析( 二)
PHP 類別與物件全解析(三)
1.類別與物件
物件:實際存在該類別事物中每個實物的個體。 $a =new User(); 實例化後的$a
引用:php的別名,兩個不同的變數名字指向相同的內容
#封裝: 把物件的屬性和方法組織在一個類別(邏輯單元)裡
繼承:以原有的類別為基礎,創建一個新類,從而程式碼復用的目的;
多態:允許將子類別類型的指標賦值給父類別類型的指標。
-------------------------------------
2.自動載入物件:
自動載入透過定義特殊的autoload函數,當引用沒有在腳本中定義的類別時會自動呼叫這個函數.
[php] view plaincopyprint? function autoload($class){ require_once("classes/$class.class.php"); }
為什麼要使用autoload
1,首先是不知道這個類別檔案存放在什麼地方,
2,另外一個就是不知道什麼時候需要用到這個檔案。
3,特別是專案檔案特別多時,不可能每個檔案都在開始的部分寫很長一串的require …
取代了一
require_once ("classes/Books.class .php") ;
require_once ("classes/Employees.class.php" ) ;
require_once ("classes/Events.class.php") ;
require_once ("classes/Patrons.class.php ") ;
zend推薦了一個最受歡迎的辦法,在檔案名稱中包含路徑。例如下面的範例:
[php] view plaincopyprint? view sourceprint? // Main.class function autoload($class_name) { $path = str_replace('_', DIRECTORY_SEPARATOR, $class_name); require_once $path.'.php'; }
temp = new Main_Super_Class();
#所有的底線都會被替換成路徑中的分隔符,上例就會去Main/Super/Class. php文件。
缺點:
是在編碼過程中,必須明確的知道程式碼檔案應當所處的位置,
而且由於將檔案路徑硬編碼在了類別名稱中,如果需要修改資料夾的結構時,我們必須手動修改所有的類別名稱。
如果是在一個開發環境中,並且對於速度不是很在意的話,使用'Include All’這個方法是非常方便的。
透過將所有類別檔案放在一個或幾個特定資料夾中,然後透過遍歷的方式來尋找載入。
例如
<?php $arr = array ( 'Project/Classes', 'Project/Classes/Children', 'Project/Interfaces' ); foreach($arr as $dir) { $dir_list = opendir($dir); while ($file = readdir($dir_list)) { $path = $dir.DIRECTORY_SEPARATOR.$file; if(in_array($file, array('.', '..')) || is_dir($path)) continue; if (strpos($file, ".class.php")) require_once $path; } } ?>
另一個方法是在類別檔案和他的位置之間建立關聯的設定檔,例如:
view sourceprint? // configuration.php array_of_associations = array( 'MainSuperClass' = 'C:/Main/Super/Class.php', 'MainPoorClass' = 'C:/blablabla/gy.php' );
呼叫的檔案
<?php require 'autoload_generated.php'; function autoload($className) { global $autoload_list; require_once $autoload_list[$className]; } $x = new A(); ?>
--------------------------------------------- ---
3.建構子與析構函式
PHP 建構方法 construct() 允許在實例化一個類別之前先執行建構方法。
建構方法是類別中的一個特殊方法。當使用 new 操作符建立一個類別的實例時,建構方法將會自動調用,其名稱必須是 construct() 。
(在一個類別中只能宣告一個建構方法,而是只有在每次建立物件的時候都會去呼叫一次建構方法,不能主動的呼叫這個方法,
所以通常用它執行一些有用的初始化任務。 .
析構函數: destruct ()定義:特殊的內成員函數,沒有回傳類型,沒有參數,不能隨意調用,也沒有重載;
在類物件生命結束的時候,由系統自動呼叫釋放在建構函數中分配的資源。
與建構方法對應的就是析構方法,析構方法允許在銷毀一個類別之前執行的一些操作或完成一些功能,比如說關閉檔案、釋放結果集等。
析構函數不能帶有任何參數,其名稱必須是 destruct() 。
範例:
class Person { public $name; public $age; //定义一个构造方法初始化赋值 public function construct($name,$age) { $this->name=$name; $this->age=$age; } public function say() { echo "my name is :".$this->name."<br />"; echo "my age is :".$this->age; } //析构函数 function destruct() { echo "goodbye :".$this->name; } } $p1=new Person("ren", 25); $p1->say();
存取控制
屬性或方法的存取控制,是透過在前面加上關鍵字public、protected 或private 來實現的 public 所定義的類別成員可以在任何地方被存取;
protected 所定義的類別成員可以被其所在類別的子類別和父類別存取(當然,該成員所在的類別也可以存取); private 定義的類別成員則只能被其所在類別存取。
對類別成員的存取控制
類別成員都必須使用關鍵字public、protected 或private 進行定義
對方法的存取控制
類別中的方法都必須使用關鍵字public 、protected 或private 進行定義。如果沒有設定這些關鍵字,則該方法會被設定成預設的 public。
範例:
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
-------------------------------------------------------------
5 .对象继承
继承定义:以原有的类为基础,创建一个新类,从而代码复用的目的;
--------------------------------------
覆写是对象继承时用到的
重载是单对象中同方法名不同参数的方法
--------------------------------------
继承已为大家所熟知的一个程序设计特性,PHP 的对象模型也使用了继承。继承将会影响到类与类,对象与对象之间的关系。
比如,当扩展一个类,子类就会继承父类的所有公有和保护方法。但是子类的方法会覆盖父类的方法。
继承对于功能的设计和抽象是非常有用的,而且对于类似的对象增加新功能就无须重新再写这些公用的功能。
class Person { public $name; public $age; function say() { echo "my name is:".$this->name."<br />"; echo "my age is:".$this->age; } } // 类的继承 class Student extends Person { var $school; //学生所在学校的属性 function study() { echo "my name is:".$this->name."<br />"; echo "my shool is:".$this->school; } } $t1 = new Student(); $t1->name = "zhangsan"; $t1->school = "beijindaxue"; $t1->study();
------- --------- ------ --------- -------- -----
6 .范围解析操作符(::)
范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员、方法和常量,还可以用于覆盖类中的成员和方法。
当在类的外部访问这些静态成员、方法和常量时,必须使用类的名字。
self 和 parent 这两个特殊的关键字是用于在类的内部对成员或方法进行访问的。
注意:
当一个子类覆盖其父类中的方法时,PHP 不会再执行父类中已被覆盖的方法,直到子类中调用这些方法为止
例子:
<?php class OtherClass extends MyClass { public static $my_static = 'static var'; public static function doubleColon() { echo parent::CONST_VALUE . "\n"; echo self::$my_static . "\n"; } } OtherClass::doubleColon(); ?>
以上是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,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。
