php报错non static,PHP报错Fatal error: Cannot make non static method的一些坑

PHP报错Fatal error: Cannot make non static method的一些坑

作者:PHPYuan 时间:2018-06-25 23:40:34

这几天在研究php的设计模式,偶然碰到了这样一个错误,百思不得解,现记录下来,以备将来所需:<?php

interface Car{

function run();

function stop();

}

class Bmw implements Car{

function run(){

echo '宝马车在运行中...';

}

function stop(){

echo '宝马车停在路边...';

}

}

class Audi implements Car{

function run(){

echo '奥迪车在运行中...';

}

function stop(){

echo '奥迪车停在路边...';

}

}

abstract class Factory{

public abstract function create();

}

class FactoryBmw extends Factory{

static function create(){

return new Bmw();

}

} //报错是这里:Fatal error: Cannot make non static method Factory::create() static in class FactoryBmw in D:\project\www\php\class\Car.class.php on line 36

class FactoryAudi extends Factory{

static function create(){

return new Audi();

}

}

报错的是注释是地方,开始我以为是父类Factory的方法create没有设置成static,但是给这个方法添加static之后,报错的就是这个地方了,查了资料才发现从PHP 5.2开始,不再允许同时使用abstract static 修饰一个抽象类的抽象方法。也就是说,PHP不再支持抽象静态方法,继续使用,将导致E_STRICT错误。也就是说以下代码是错误的。abstract class Factory{

abstract static function create();

}

不能在父类中添加抽象的静态方法,那么子类中的create方法就不能是静态的,一时陷入两难的境地。

c57550800d147813e04b1dace5f68b72.png

就是快要放弃时,突然想到在接口中可以定义静态方法,试了一下发现可以了,上代码:interface IFactory{

static function create();

}

abstract class Factory implements IFactory{

}

class FactoryBmw extends Factory{

static function create(){

return new Bmw();

}

}

class FactoryAudi extends Factory{

static function create(){

return new Audi();

}

}

由于在接口中可以定义抽象的静态方法,当用一个抽象类实现接口时,这个抽象就“继承”了这个抽象的静态方法,算是一种曲线求国吧,不知道有没有大神可以解释一下。^_^

4f0b797fc2890ef5e5610e77b217d916.png

分享到:

>> 下一篇:关于Web架构的一些事 (2018-06-25 23:40)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值