php静态方法使用心得

php静态方法调用

静态方法的理解

php支持面向对象已经很多年了,面向对象最基础的就是类和类的实例化,使用类的时候需要先实例化一下,才能调用类的一些方法或者访问类的属性,但是实际的开发过程中,很多时候有一些需要是不用实例化的就调用的,例如help工具函数的类,本身help里面的函数没有什么关联,如果每次调用都要实例化一次的话,实在是没有这个必要,还有一些config的类也是如此,因此需要静态的方法,直接通过类名调用的就行了,因此静态方法也称作类方法

静态方法的一些问题

静态方法也不是万能的,有其自身的一些局限性,例如,静态方法不能使用$this调用类的方法或者属性(使用self::非静态方法,系统会将这个方法转换为静态方法),这就使得,如果一个静态方法里面又需要调其他的方法,其他的方法也需要写成静态方法,当这个调用链比较复杂了的时候,最后类里面的方法可能都要变成静态方法了,虽然都使用静态方法来写,好像也没什么问题,我也找不出什么理由来反驳这种做法的坏处,毕竟好像速度和内存的占用还提升了。但是这样终究是有违面向对象的理念,拓展性和耦合性都有问题,具体怎么看,看各人的理解了。

static和self的区别

非本类的调用,这里就不多分析了,使用比较简单。这里笔者在实际开发过程中,经常遇到self::静态防范和static::静态方法的调用情况,起初我也比较迷茫,不知道这是为啥,后面经过查阅一些资料才明白其中的不同,废话不多说,上代码:

使用self

class testClass
{

    public static function test()
    {
        echo 'test'."\n";
    }

    public function runTest()
    {
        self::test();//注意这里是self
    }
}

class test1Class extends testClass
{
    public static function test()
    {
        echo 'test1'."\n";
    }
}
$class = new testClass();
$class->runTest();
$class = new test1Class();
$class->runTest();
exit;
输出:
test
test

使用self的时候,都是调用的是父类的方法

使用static

class testClass
{

    public static function test()
    {
        echo 'test'."\n";
    }

    public function runTest()
    {
        static::test();//注意这里是self
    }
}

class test1Class extends testClass
{
    public static function test()
    {
        echo 'test1'."\n";
    }
}
$class = new testClass();
$class->runTest();
$class = new test1Class();
$class->runTest();
exit;
输出:
test
test1

使用self的时候,父类的调用的是父类的方法,子类的调用,调用的是子类的方法

总结

1,简单来说,self的调用,都是调用该类自己的方法,static的调用,先判断调用方是否有该方法,有就调用自己的方法,没有才会调用父类的方法。
2,很多时候static会比self更好用,因为static已经包含了self的功能,而且提供了更强的拓展性,建议使用static,但是如果确定只调用自己的,不能被子类的方法影响,那么还是用self调用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值