1. 程式人生 > >php中self 、parent的用法

php中self 、parent的用法

self: 本類(不要理解成本物件)
parent: 父類

在引入自身的靜態屬性/靜態方法,以及父類的方法時,可以用到.
用法:

self::$staticProperty
self::staticMothed;
parent::$staticProperty
parent::Mothed;
class Human {
    static public $head = 1;

    public function say() {
        echo Human::$head,'<br />';
    }
}
echo Human::$head,'<br />'
; // 1 $lisi = new Human(); $lisi->say(); // 某一天,類名要統一,規範化. Human不叫Human了,叫cHuman // 導致類內部,凡引用到自身類名的也要改,邏輯類名我們需要改,而類內部的我們也都需要改,就會比較麻煩,self就是在這種情況下產生的

就會變成下面這種情況

class cHuman {
    static public $head = 1;

    public function say() {
        echo self::$head,'<br />';
    }
}

echo cHuman::$head
,'<br />'; // 1 $lisi = new cHuman(); $lisi->say(); //加一個繼承類 class Stu extends cHuman { static public $head = 2; public function say() { echo self::$head,'<br />'; echo '父類只有',parent::$head,'<br />'; } } $ming = new Stu(); $ming->say();

========一位同學的疑問,用$this,還用parent====

class a{
    public function a1(){
       echo 'this is class function a1()';
    }

}
class b extends a{
    public function b1(){
        $this->a1();  //class b中已經從a中繼承了方法a1()
    }

    public function b2(){
        parent::a1(); 
    }
}

$b = new b();
$b->b1();
$b->b2();
/**
分析:
上面2個呼叫,顯示效果一樣的,
如果從速度角度看,理論上parent::稍快一點點.
因為在子類尋找a1方法,尋找不到,再去其父類尋找.

但是從面向角度看,繼承過來的,就是自己的.
$this 更符合面向的思想.
例如;
class a {
}

class b extends a {
}

class c extends b {
}
...
...

class f extends e {
    parent::parent::parent::
    總不能這麼寫吧?
}

一個小例子

class Human {

    protected $age = 23;
    public function say() {
        echo $this->age,'<br />';
    }
}


class Stu extends Human{
    protected $age = 15;

    public function say1() {
        $this->say();
    }

    public function say2() {
        parent::say();
    }

    public function say3() {
        echo $this->age;
    }
}

$ming = new Stu();

print_r($ming);

$ming->say1();  // 15
$ming->say2();  // 15
$ming->say3();  // 15

相關推薦

phpself parent用法

self: 本類(不要理解成本物件) parent: 父類 在引入自身的靜態屬性/靜態方法,以及父類的方法時,可以用到. 用法: self::$staticProperty self::st

PHPthisselfparent的區別

參考: http://www.cnblogs.com/devcjq/articles/2424738.html http://www.cnblogs.com/alsf/p/9621002.html 1.PHP之$this解析 ①$this是指向當前物件(即類的例項化物件)的指標,靜態方法中不能使

phpself,this, parent 詳解

pre name 重寫 重新 調用父類 set 改變 col upload 1、前言 self,this,parent 這三個關鍵字在 類的使用中可謂屢見不鮮,那麽這三個關鍵字又有什麽區別;從字面意思理解: this 是指向當前類(就近原則,離誰近跟誰) self

PHPVC6VC9TSNTS版本的區別與用法詳解

進行 系統資源 stc 詳解 ron 線程安全 info 啟動 win 1. VC6與VC9的區別: VC6版本是使用Visual Studio 6編譯器編譯的,如果你的PHP是用Apache來架設的,那你就選擇VC6版本。 VC9版本是使用Visual Studio 20

PHPMySQLMySQLi和PDO的用法和區別

PHP的MySQL擴充套件(優缺點) 設計開發允許PHP應用與MySQL資料庫互動的早期擴充套件。mysql擴充套件提供了一個面向過程 的介面; 並且是針對MySQL4.1.3或更早版本設計的。因此,這個擴充套件雖然可以與MySQL4.1.3或更新的數 ;

phpprint_rvar_dump和var_export幾個函式的用法區別 。php setcookie一些限制。php不同路徑cookies取值問題。PHP獲取站點根目錄

php中print_r、var_dump和var_export幾個函式的用法區別   print_r ( $array/$var )  print 是列印的意思,而r則取自Array的單詞,那麼該函式的功能就是列印陣列內容,它既可以列印陣列內容,也可以列印普通的變數

淺談PHPpackunpack的詳細用法

特殊 ++ 位置 per 小端 bsp 分享 .com 十六進制 轉自:https://segmentfault.com/a/1190000008305573 PHP中有兩個函數pack和unpack,很多PHPer在實際項目中從來沒有使用過,甚至也不知道這兩個方法是

PHPtry catch的用法

tro sta main 面向對象 and cau pub 展示 添加 異常(Exception)用於在指定的錯誤發生時改變腳本的正常流程。 什麽是異常? PHP 5 提供了一種新的面向對象的錯誤處理方法。 異常處理用於在指定的錯誤(異常)情況發生時改變腳本的正常流程

jsslicesplice用法與區別

delet 內容 title pan ont 指定 至少 一個 拷貝 1.slice(start,end)(參數可選) slice() 方法返回一個從開始到結束(不包括結束)選擇的數組的一部分淺拷貝到一個新數組對象。原始數組不會被修改。 var a = [‘a‘, ‘b‘

php$_REQUEST $_GET $_POST $_COOKIE 的關系和區別

one 相同 存取 dev efault light 變量 指定 request 看到REQUEST可以通吃GET 、POST 、COOKIE 後 感覺這個$_REQUEST太強大了是不是其他的幾個超級變量就沒有用了,下面對他們整體做個比較: 1.安全性 post>

PHPself與static

php self static 所謂延遲靜態綁定,顧名思義,靜態調用時::符號左側的部分的的綁定是延遲,也就是說不再被解析為定義當前方法所在的類,而是在實際運行時計算的。 class A { public static function who() { echo __

8:selfparent單例模式

self和parent的用法 self:本類,自身 parent:父類 使用場景: 首先請明確區分類和物件; 在使用本類/父類的,靜態屬性、方法時,會用到; self 在本類中使用,用於引用自身的靜態屬性和方法; parent 在子類中使用,用於引用父類

PHP異常的基本用法

前言 本文 GitBook 地址: https://www.gitbook.com/book/leoyang90/laravel-source-analysis 對於一個優秀的框架來說,正確的異常處理可以防止暴露自身介面給使用者,可以提供快速追溯問題的提示給開發人員。本文會詳細的介紹&

phpself與$this的分別

成員變量 static變量 stat func name 定義 聲明 aud new 在訪問PHP類中的成員變量或方法時,如果被引用的變量或者方法被聲明成const(定義常量)或者static(聲明靜態),那麽就必須使用操作符:: <?php class Ca

PHPisset()empty()函式那些坑。。。

1,empty — 檢查一個變數是否為空,bool empty ( mixed $var ) 判斷一個變數是否被認為是空的。當一個變數並不存在,或者它的值等同於false,那麼它會被認為不存在。如果變數不存在的話,empty(

phpself與static的區別

1、假設我們有個Car類,它有2個方法:model()和getModel()。 class Car{ public function model(){ //這裡我們使用了關鍵字self self::getModel(); } p

phpcurlfsocketfile_get_content三個函式的使用比較

php中curl和file_get_content的一些比較 主要區別: 學習才發現,curl支援很多協議,有FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE以及LDAP,也就是說,它能做到很多file_get_content做不到的事情。

PHPechoprintprint_rvar_dumpvar_export的區別

void echo ( string $arg1 [, string $... ] ) echo 是一個語言結構,可以不用括號包圍引數列表,在沒有括號情況下可接收多個引數並輸出 echo 'one'

PHPClosure::bindTo的用法分析

最近使用laravel-admin開發一個後臺,過程中發現了這麼一個呼叫: 在display方法的閉包函式中,使用了$this去獲取值($this是laravel中的Model,這裡取的是資料庫中返回

淺談HTTPGETPOST用法以及它們的區別

HTTP定義了與伺服器互動的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。URL全稱是資源描述符。我們可以這樣認為: 一個URL地址,它用於描述一個網路上的資源,而HTTP中的GET,POST,PUT,DELETE就對應著對這個資源