目錄
静态变量
静态方法
首頁 php教程 php手册 php中的static

php中的static

Jun 21, 2016 am 08:47 AM
parent self static this


静态成员是一种类变量,可以把它看成时属于整个类而不是属于类的某个实例。与一般的实例变量不同的是,静态成员只保留一个变量值,而这个变量值对所有的实例都是有效的,也就是说,所有的实例共享这个成员。

$this只表示类的当前实例,而 self:: 表示的是类本身,在类之外的代码中不能使用这个操作符,而且它不能识别自己在继承树层次结构中的位置。也就是说,在扩展类中使用self 作用域时,self 可以调用基类中声明的方法,但它调用的总是已经在扩展类中重写的方法。与$this不同的是,在使用静态变量时,必须在作用域限定符后面加上$符号。

在扩展类中,在基类的方法被重写的情况下,使用 parent 作用域调用定义在基类中的方法。静态成员也可以只属于父类。如果在子类和父类中同时声明了某个成员,也可以使用parant::在子类中访问父类中的变量。在这种情况下,父类的静态成员和子类的静态成员保存的是不同的值。

可以在 :: 操作符的左边写上类的名称来静态地访问某个成员,这样避免创建类的实例。不仅省略掉实例化类的代码,而且还会更高效,因为类的每个实例都会占用一小部分的系统资源。

在使用 :: 操作符访问成员变量时,需要再次注意对$符号的使用。因为PHP当前不支持动态的静态变量的使用,也就是说不支持可变的静态变量。在使用$this->$var时,被访问的成员是包含在$var中的变量的值。而不用$符号访问某个变量实际上查找的是类的某个常量,而常量是不能通过$this来访问的。

PHP6中提出的static::作用域使我们不再需要使用self::和parent::。当希望指向最终的实现功能的类时,就可以使用static::,这个限定符会在代码执行之前立即计算出继承层次机构上最后那个类的成员。之一过程被称为延迟绑定,它使我们可以在子类中重写某个静态变量,并且也可以从某个在父类中声明的函数中反问这个最终成员。

有时,可能有必要创建供所有类实例共享的字段和方法,这些字段和方法与所有的类实例有关,但不能由任何特定对象调用。例如,假设要编写一个类,跟踪网页访问者的数量。你一定不希望每次实例化该类时都把访问者数量重置为0 ,此时就可以将该字段设置为static作用域:

<?php
    class visitors
    {
        private static $visitors = 0;
        function __construct()
        {
             self::$visitors&#43;&#43;;
        }
        static function getVisitors()
        {
            return self::$visitors;
        }
    }
    /* Instantiate the visitors class. */
    $visits = new visitors();
    echo visitors::getVisitors()."<br/>";
    /* Instantiate another visitors class. */
    $visits2 = new visitors();
    echo visitors::getVisitors()."<br/>";
?>
登入後複製

程序运行结果:

1

2

因为$visitors字段声明为static,所以对其值的任何改变都会反映到所有实例化对象中。还要注意,静态字段和方法应使用self关键字和类名来引用,而不是通过this和箭头操作符。这是因为使用“正常”方法引用静态字段是不可能的,会导致语法错误。

不能在类中使用$this来引用为static字段。

静态变量

静态变量是只存在于函数作用域的变量,不过,在函数执行完成后,这种变量的值不会丢失,也就是说,在下一次调用这个函数时,变量仍然会记得原来的值。要将某个变量定义为静态的,只需要在变量前加上 static 关键字即可。

在类中,static关键字有两种主要用法,一是用来定义静态成员,一是用来定义静态方法。在类的内部,可以使用作用域限定符 (::) 来访问不同层次作用域的变量。

静态方法

静态方法和非静态方法之间有一个重要的区别:在调用静态方法时,不再需要拥有类的实例。

静态方法和非静态方法使用原则:一是如果某个方法中不包含$this变量,就应该时静态方法;如果不需要类的实例,可能还应该使用静态类,这样可以免去实例化类的工作。另,在静态方法中时不能使用$this变量的,因为静态方法不属于某个特定的实例。



本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
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)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
為什麼NameResolutionError(self.host, self, e) from e,怎麼解決 為什麼NameResolutionError(self.host, self, e) from e,怎麼解決 Mar 01, 2024 pm 01:20 PM

報錯的原因NameResolutionError(self.host,self,e)frome是由urllib3函式庫中的例外類型,這個錯誤的原因是DNS解析失敗,也就是說,試圖解析的主機名稱或IP位址無法找到。這可能是由於輸入的URL位址不正確,或DNS伺服器暫時無法使用所導致的。如何解決解決此錯誤的方法可能有以下幾種:檢查輸入的URL地址是否正確,確保它是可訪問的確保DNS伺服器可用,您可以嘗試在命令行中使用"ping"命令來測試DNS伺服器是否可用嘗試使用IP位址而不是主機名稱來存取網站如果是在代理

Python中的self怎麼使用 Python中的self怎麼使用 May 17, 2023 pm 10:40 PM

在介紹Python的self用法之前,先來介紹下Python中的類別和實例我們知道,物件導向最重要的概念就是類別(class)和實例(instance),類別是抽象的模板,例如學生這個抽象的事物,可以用一個Student類別來表示。而實例是根據類別創建出來的一個個具體的“物件”,每個物件都從類別中繼承有相同的方法,但各自的資料可能不同。 1.以Student類別為例,在Python中,定義類別如下:classStudent(object):pass(Object)表示該類別從哪個類別繼承下來的,Object類別是所有

聊聊Vue2為什麼能透過this存取各種選項中屬性 聊聊Vue2為什麼能透過this存取各種選項中屬性 Dec 08, 2022 pm 08:22 PM

這篇文章帶大家解讀vue原始碼,來介紹一下Vue2中為什麼可以使用 this 存取各種選項中的屬性,希望對大家有幫助!

如何在Python中存取父類別屬性? 如何在Python中存取父類別屬性? Aug 26, 2023 am 10:17 AM

在物件導向程式設計中,繼承允許我們創建繼承現有類別的屬性和方法的新類別。這個強大的概念可以在我們的程式中實現程式碼重複使用、模組化和可擴展性。在深入研究存取父類別屬性之前,讓我們先了解一下

一篇搞懂this指向,追趕70%的前端人 一篇搞懂this指向,追趕70%的前端人 Sep 06, 2022 pm 05:03 PM

同事因為this指向的問題卡住的bug,vue2的this指向問題,使用了箭頭函數,導致拿不到對應的props。當我跟他介紹的時候他竟然不知道,隨後也刻意的看了一下前端交流群,至今最起碼還有70%以上的前端程式設計師搞不明白,今天給大家分享一下this指向,如果啥都沒學會,請給我一個大嘴巴子。

c語言static的作用和用法是什麼 c語言static的作用和用法是什麼 Jan 31, 2024 pm 01:59 PM

c語言static的作用與用法:1、變數作用域;2、生命週期;3、函數內部;4、修飾全域變數;5、修飾函數;6、其他用途;詳細介紹:1、變數作用域,當一個變數前有static關鍵字,那麼這個變數的作用域被限制在聲明它的檔案內,也就是說,這個變數是“檔案層級作用域”,這對於防止變數的“重複定義”問題很有用; 2、生命週期,靜態變數在程式開始執行時初始化一次,並在程式結束時銷毀等等。

Java中的static、this、super、final怎麼會使用 Java中的static、this、super、final怎麼會使用 Apr 18, 2023 pm 03:40 PM

一、static  請先看下面這段程式:publicclassHello{publicstaticvoidmain(String[]args){//(1)System.out.println("Hello,world!");//(2)}}看過這段程序,對於大多數學過Java的從來說,都不陌生。即使沒有學過Java,而學過其它的高階語言,例如C,那你也應該能看懂這段程式碼的意思。它只是簡單的輸出“Hello,world”,一點別的用處都沒有,然而,它卻展示了static關鍵字的主

C語言中static關鍵字的實際應用場景及使用技巧 C語言中static關鍵字的實際應用場景及使用技巧 Feb 21, 2024 pm 07:21 PM

C語言中static關鍵字的實際應用場景及使用技巧一、概述static是C語言中的關鍵字,用來修飾變數與函數。它的作用是改變其在程式運行過程中的生命週期和可見性,使得變數和函數具有靜態的特性。本文將介紹static關鍵字的實際應用場景及使用技巧,並透過具體的程式碼範例進行說明。二、靜態變數延長變數的生命週期使用static關鍵字修飾局部變數可以將其生命週期

See all articles