首页 > php教程 > php手册 > 正文

PHP 之 this self parent static 对比

WBOY
发布: 2016-06-06 19:40:38
原创
1408 人浏览过

this 绑定的是当前已经实例化的对象 这样长出现的问题: 如果你在一个父类中使用$this调用当前一个类的方法或者属性,如果这个类被继承,且在相应的子类中有调用的属性或者方法是,则父类中的$this调用的方法或者属性会使用子类中的方法。 ? php class basePa

this 绑定的是当前已经实例化的对象

这样长出现的问题: 如果你在一个父类中使用$this调用当前一个类的方法或者属性,如果这个类被继承,且在相应的子类中有调用的属性或者方法是,则父类中的$this调用的方法或者属性会使用子类中的方法。

<span>php               
                    
</span><span>class</span><span> baseParent    
{                   
    </span><span>static</span> <span>$counter</span> = 0<span>;
    </span><span>function</span><span> getName()
    {               
        </span><span>return</span> 'baseParent'<span>;
    }               
                    
    </span><span>function</span><span> printName()
    {               
        </span><span>echo</span> <span>$this</span>->getName() . "\n"<span>;                                                                                                                        
    }               
}                   
                    
</span><span>class</span> base <span>extends</span><span> baseParent
{                   
    </span><span>static</span> <span>$counter</span> = 0<span>;
    </span><span>function</span><span> addCounter()
    {               
        </span><span>return</span> self::<span>$counter</span> +=1<span>;
    }               
                    
    </span><span>function</span><span> getName()
    {               
        </span><span>return</span> 'base'<span>;
    }               
                    
}                   
                    
</span><span>$one</span> = <span>new</span><span> base();  
</span><span>$one</span>->printName();
登录后复制

输出: base


parent 指向当前对象的父类的

self 指向当前类本身的,不指向任何已经实例化的对象的,一般用于指向类中的静态变量和静态方法: 因为静态方法和静态的变量是不能实例化到对象当中的,它只存在于当前类中

<span>php
</span><span>class</span><span> baseParent         
{
    </span><span>static</span> <span>$counter</span> = 0<span>;
}

</span><span>class</span> base <span>extends</span><span> baseParent
{
</span><span>function</span><span> addCounter()
    {
        </span><span>return</span> self::<span>$counter</span> +=1<span>;
    }
}

</span><span>$one</span> = <span>new</span><span> base();
</span><span>echo</span> <span>$one</span>->addCounter() . "\n"<span>;

</span><span>$two</span> = <span>new</span><span> base();
</span><span>echo</span> <span>$two</span>->addCounter() . "\n"<span>;

</span><span>echo</span> baseParent::<span>$counter</span>;
登录后复制

输出:1 2 2

static 后期静态绑定:
    static::不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为"静态绑定",
因为它可以用于(但不限于)静态方法的调用。

<span>php
</span><span>class</span><span> baseParent    
{                   
    </span><span>static</span> <span>$counter</span> = 0<span>;
    </span><span>function</span><span> getName()
    {               
        </span><span>return</span> 'baseParent'<span>;
    }               
 
    </span><span>function</span><span> printName()
    {               
        </span><span>echo</span> <span>static</span>::getName() . "\n"<span>;
    }
}                   

</span><span>class</span> base <span>extends</span><span> baseParent
{                   
    </span><span>static</span> <span>$counter</span> = 0<span>;
    </span><span>function</span><span> addCounter()
    {               
        </span><span>return</span> self::<span>$counter</span> +=1<span>;
    }

    </span><span>function</span><span> getName()
    {               
        </span><span>return</span> 'base'<span>;                                                                                                                                       
    }               

}

</span><span>$one</span> = <span>new</span><span> base();  
</span><span>$one</span>->printName();
登录后复制

 输出: base

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板