php 未实例化类调用方法的问题

/**
 * 双冒号操作符其意义应该是不实例化类而调用类中的方法或者成员等
 *
 */
class man1
{
    public function show()
    {
        echo "Hello World!";
    }
}
//由于show方法中没有this,所以不出错
man1::show();

class man2
{
    public static $a = 1;
    public function show()
    {
        self::$a;
        echo "Hello World!";
    }
}
//由于show方法中没有this,所以不出错
man2::show();

class man3
{
    public $a = 1;
    public static function show()
    {
        echo $this->a;
        echo "Hello World!";
    }
}
//这种是犯错的,static 方法里面不可以用this
$p = new man3();
$p->show();

注意下面这种写法:

class a
{
    public function show()
    {
        print_r($this);
        echo $this->str;
    }
}
class b
{
    public $str = "Hello World!";
    public function test()
    {
        a::show();
    }
}
/**
 *此处程序运行的结果是输出”Hello World!”
 *因为$this是指向当前类实例化的一个对象,其作用范围为当前对象的上下文
 *而此处A::show()中的$this其实是指向B类实例化的对象 ,而且正在对象上下文中,所以能够输出B中的变量$str的值
 */
$test = new B();
$test->test();

看这种写法:

//自我感觉这个这种写法太绕了,最好不要用
class man1{
    public function run()
    {
        print_r($this);//man2
        $this->say();//由于this为man2实例化的对象,故可以调用man2类中的say方法
        echo 'running';
    }
}

class man2 extends man1{
    public function say()
    {
        echo 'saying';        
    }
}

$p = new man2();
$p->run();

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值