搜尋
首頁後端開發php教程php面向对象全攻略 (十) final static const关键字的使用_PHP教程

14.final 关键字的应用
这个关键字只能用来定义类和定义方法,不能使用final 这个关键字来定义成员属性,因
为final 是常量的意思,我们在PHP 里定义常量使用的是define()函数,所以不能使用final 来
定义成员属性。
使用final 关键标记的类不能被继承;
代码片段
final class Person{
… …
}
class Student extends Person{
}
会出现下面错误:
Fatal error: Class Student may not inherit from final class (Person)
使用final 关键标记的方法不能被子类覆盖,是最终版本;
代码片段
class Person{
final function say() {
}
}
class Student extends Person{
function say() {
}
}
会出现下面错误:
Fatal error: Cannot override final method Person::say()
15.static 和const 关键字的使用
Static 关键字是在类中描述成员属性和成员方法是静态的;静态的成员好处在那里呢?
前面我们声明了“Person”的人类,在“Person”这个类里如果我们加上一个“人所属国家”
的属性,这样用“Person”这个类实例化出几百个或者更多个实例对象,每个对象里面就都
有“所属国家”的属性了,如果开发的项目就是为中国人而开发的,那么每个对象里面就都
有一个国家的属性是“中国”其它的属性是不同的,如果我们把“国家”的属性做成静态的
成员,这样国家的属性在内存中就只有一个,而让这几百个或更多的对象共用这一个属性,
static 成员能够限制外部的访问,因为static 的成员是属于类的,是不属于任何对象实例,是
在类第一次被加载的时候分配的空间,其他类是无法访问的,只对类的实例共享,能一定程
度对类该成员形成保护;
从内存的角度我们来分析一下,内存从逻辑上被分为四段,其中对象是放在“堆内存”里
面,对象的引用被放到了“栈内存”里,而静态成员则放到了“初始化静态段”,在类第一次
被加载的时候放入的,可以让堆内存里面的每个对象所共享,如下图;
'700')this. style="max-width:90%";" border="0" alt="php面向对象全攻略 (十) final static const关键字的使用_PHP教程" > 
类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方法也是一样
的,类似于全局函数。
代码片段

复制代码 代码如下:


class Person{
//下面是人的静态成员属性
public static $myCountry="中国";
// var $name; //人的名子
//这是人的静态成员方法
public static function say(){
echo "我是中国人
";
}
}
//输出静态属性
echo Person::$myCountry;
//访问静态方法
Person::say();
//重新给静态属性赋值
Person::$myCountry="美国";
echo Person::$myCountry;
?>

因为静态成员是在类第一次加载的时候就创建的,所以在类的外部不需要对象而使用类
名就可以访问的到静态的成员;上面说过,静态成员被这个类的每个实例对象所共享,那么
我们使用对象可不可以访问类中的静态成员呢?从上图中我们可以看到,静态的成员不是在
每个对象内部存在的,但是每个对象都可以共享,所以我们如果使用对象访问成员的话就会
出现没有这个属性定义,使用对象访问不到静态成员的,在其它的面向对象的语言中,比如
Java 是可以使用对象的方式访问静态成员的,如果PHP 中可以使用对象访问静态成员的话,
我们也尽量不要去使用,因为静态的成员我们在做项目的时候目的就是使用类名去访问。
类里面的静态方法只能访问类的静态的属性,在类里面的静态方法是不能访问类的非静
态成员的,原因很简单,我们要想在本类的方法中访问本类的其它成员,我们需要使用$this
这个引用,而$this 这个引用指针是代表调用此方法的对象,我们说了静态的方法是不用对象
调用的,而是使用类名来访问,所以根本就没有对象存在,也就没有$this 这个引用了,没有
了$this 这个引用就不能访问类里面的非静态成员,又因为类里面的静态成员是可以不用对象
来访问的,所以类里面的静态方法只能访问类的静态的属性,即然$this 不存在,在静态方法
中访其它静态成员我们使用的是一个特殊的类“self”;self 和$this 相似,只不过self 是代表
这个静态方法所在的类。所以在静态方法里,可以使用这个方法所在的类的“类名”,也可以
使用“self”来访问其它静态成员,如果没有特殊情况的话,我们通常使用后者,即“self::成
员属性”的方式。
代码片段
复制代码 代码如下:


class Person{
//下面是人的静态成员属性
public static $myCountry="中国";
//这是人的静态成员方法, 通过self访问其它静态成员
public static function say(){
echo "我是".self::$myCountry."
";
}
}
//访问静态方法
Person::say();
?>

在非静态方法里可不可以访问静态成员呢,当然也是可以的了,但是也不能使用“$this”
引用也要使用类名或是“self::成员属性的形式”。
const 是一个定义常量的关键字,在PHP 中定义常量使用的是“define()”这个函数,但
是在类里面定义常量使用的是“const”这个关键字,类似于C 中的#define 如果在程序中改变
了它的值,那么会出现错误,用“const”修饰的成员属性的访问方式和“static”修饰的成员
访问的方式差不多,也是使用“类名”,在方法里面使用“self”关键字。但是不用使用“$”
符号,也不能使用对象来访问。
代码片段
复制代码 代码如下:

class MyClass{
//定义一个常量constant
const constant = 'constant value';
function showConstant() {
echo self::constant . "\n"; //使用self访问,不要加”$”
}
}
echo MyClass::constant . "\n"; //使用类名来访问,也不加”$”
$class = new MyClass();
$class->showConstant();
// echo $class::constant; 是不允许的

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/320633.htmlTechArticle14.final 关键字的应用 这个关键字只能用来定义类和定义方法,不能使用final 这个关键字来定义成员属性,因 为final 是常量的意思,我们在...
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
使用數據庫存儲會話的優點是什麼?使用數據庫存儲會話的優點是什麼?Apr 24, 2025 am 12:16 AM

使用數據庫存儲會話的主要優勢包括持久性、可擴展性和安全性。 1.持久性:即使服務器重啟,會話數據也能保持不變。 2.可擴展性:適用於分佈式系統,確保會話數據在多服務器間同步。 3.安全性:數據庫提供加密存儲,保護敏感信息。

您如何在PHP中實現自定義會話處理?您如何在PHP中實現自定義會話處理?Apr 24, 2025 am 12:16 AM

在PHP中實現自定義會話處理可以通過實現SessionHandlerInterface接口來完成。具體步驟包括:1)創建實現SessionHandlerInterface的類,如CustomSessionHandler;2)重寫接口中的方法(如open,close,read,write,destroy,gc)來定義會話數據的生命週期和存儲方式;3)在PHP腳本中註冊自定義會話處理器並啟動會話。這樣可以將數據存儲在MySQL、Redis等介質中,提升性能、安全性和可擴展性。

什麼是會話ID?什麼是會話ID?Apr 24, 2025 am 12:13 AM

SessionID是網絡應用程序中用來跟踪用戶會話狀態的機制。 1.它是一個隨機生成的字符串,用於在用戶與服務器之間的多次交互中保持用戶的身份信息。 2.服務器生成並通過cookie或URL參數發送給客戶端,幫助在用戶的多次請求中識別和關聯這些請求。 3.生成通常使用隨機算法保證唯一性和不可預測性。 4.在實際開發中,可以使用內存數據庫如Redis來存儲session數據,提升性能和安全性。

您如何在無狀態環境(例如API)中處理會議?您如何在無狀態環境(例如API)中處理會議?Apr 24, 2025 am 12:12 AM

在無狀態環境如API中管理會話可以通過使用JWT或cookies來實現。 1.JWT適合無狀態和可擴展性,但大數據時體積大。 2.Cookies更傳統且易實現,但需謹慎配置以確保安全性。

您如何防止與會議有關的跨站點腳本(XSS)攻擊?您如何防止與會議有關的跨站點腳本(XSS)攻擊?Apr 23, 2025 am 12:16 AM

要保護應用免受與會話相關的XSS攻擊,需採取以下措施:1.設置HttpOnly和Secure標誌保護會話cookie。 2.對所有用戶輸入進行輸出編碼。 3.實施內容安全策略(CSP)限制腳本來源。通過這些策略,可以有效防護會話相關的XSS攻擊,確保用戶數據安全。

您如何優化PHP會話性能?您如何優化PHP會話性能?Apr 23, 2025 am 12:13 AM

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显著提升应用在高并发环境下的效率。

什麼是session.gc_maxlifetime配置設置?什麼是session.gc_maxlifetime配置設置?Apr 23, 2025 am 12:10 AM

theSession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceisesneededeededeedeedeededto toavoidperformance andunununununexpectedLogOgouts.3)

您如何在PHP中配置會話名?您如何在PHP中配置會話名?Apr 23, 2025 am 12:08 AM

在PHP中,可以使用session_name()函數配置會話名稱。具體步驟如下:1.使用session_name()函數設置會話名稱,例如session_name("my_session")。 2.在設置會話名稱後,調用session_start()啟動會話。配置會話名稱可以避免多應用間的會話數據衝突,並增強安全性,但需注意會話名稱的唯一性、安全性、長度和設置時機。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Mac版

SublimeText3 Mac版

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