self static this parent 关键词的基本用法

在使用面向对象的时候,总会被几个词迷惑,self 自己,this 这个 ,static 静态的,parent 父亲,到底这些是什么鬼,大家跟着我的实例走,就能洞悉其中的微妙了

self 被用作当前类的一个引用

<?php
class a {

    public static function hello() {
        self::showHello();
    }

    public static function showHello() {
        echo __CLASS__ . " :hello world <br />";
    }

}

a::hello();

class ab extends a {

    public static function showHello() {
        echo __CLASS__ . " :hello world<br />";
    }

}

ab::hello();

输出:
a :hello world
a :hello world


static 后期静态绑定 static::不再被解析为定义当前方法所在的类,而是在实际运行时计算的 如下面的例子,注意他的输出

<?php
class a
{
    public static function hello()
    {
        static::showHello();
    }
    public static function showHello()
    {
        echo __CLASS__." :hello world <br />";
    }
}
a::hello();

class ab extends a
{
    public static function showHello()
    {
         echo __CLASS__." :hello world<br />";
    }
}
ab::hello();

输出:
a :hello world
ab :hello world


$this 当前类的一个实例

<?php
class a 
{
    public  function hello()
    {
        $this->showHello();
    }
    public  function showHello()
    {
        echo __CLASS__." :hello world <br />";
    }
}
 $a=new a();
 $a->hello();

class ab extends a
{
    public  function showHello()
    {
         echo __CLASS__." :hello world<br />";
    }
}
$ab=new ab();
$ab->hello();

parent 指定当前类的父类

<?php
class a {

    public function hello() {

        $this->showHello();
    }

    public function showHello() {
        echo __CLASS__ . " :hello world <br />";
    }

}

class ab extends a {

    public function hello() {

        parent::showHello();
    }

    public function showHello() {
        echo __CLASS__ . " :hello world<br />";
    }

}

$ab = new ab();
$ab->hello();

输出:
a :hello world


实例测试:

<?php
class A {
    public static function foo() {
        static::who();
    }

    public static function who() {
        echo __CLASS__."\n";
    }
}

class B extends A {
    public static function test() {
        A::foo();
        parent::foo();
        self::foo();
    }

    public static function who() {
        echo __CLASS__."\n";
    }
}
class C extends B {
    public static function who() {
        echo __CLASS__."\n";
    }
}

C::test(); 

输出:
A
C
C


总结:这是这些关键字进行方法调用的时候,主要明确该调用哪个类的方法。php 的static 是专门用来做延期静态绑定的,其他的关键字,在加载的时候其实已经明确了。大家如有疑问,欢迎留言咨询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值