动态类 php,动态重新定义PHP类函数?

以下是您可以尝试的可能解决方案的想法.让Cow和Human类扩展Entity类.但是,实体类将使用

factory基于值是否安全来实例化对象.让我们更详细地看一下:

/*

* Class Entity should not be able to be instantiated.

* It should contain a factory to instantiate the

* appropriate entity and an abstract function declaring

* the method that each entity will need to implement.

*/

abstract class Entity {

public static function factory($type) {

return (is_subclass_of($type, "Entity")) ? new $type() : FALSE;

}

abstract public function sayHi();

}

/*

* Human class extends Entity and implements the

* abstract method from Entity.

*/

class Human extends Entity {

public function sayHi() {

echo "Hello World!";

}

}

/*

* Cow class extends Entity and implements the

* abstract method from Entity.

*/

class Cow extends Entity {

public function sayHi() {

echo "Moo!";

}

}

现在使用这个方法,调用工厂方法,如果一切正常,它将实例化适当的类,它将扩展实体.

$person = Entity::factory("Human");

$person->sayHi();

$cow = Entity::factory("Cow");

$cow->sayHi();

使用is_subclass_of()会保证您的安全,因为如果传入的值不是扩展Entity的类,则返回值为FALSE.

如果你想看到上面的代码在行动,复制上面的PHP代码并在phpfiddle.org测试它.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值