php专区

 首页 > php专区 > PHP进阶 > 设计模式 > PHP动态实例化一个含有命名空间的类对象的几种方法

PHP动态实例化一个含有命名空间的类对象的几种方法

分享到:
【字体:

php实例化一个类很简单,比如Person类的实例化:

$obj = new Person();


有时候我们需要动态的实例化一个对象,比如有两个类:Person类和Animal类,我需要根据传来的参数来实例化对象,那么我们可以z这样写个函数:

function get_obj($obj_name)
{
    return new $obj_name();
}


如果我们要实例化一个使用了命名空间的类,比如:Person类和Animal类都在namespace CommonObject;下,那怎么做?同样可以写个函数,把命名空间拼接上去即可:

function get_obj($obj_name)
{
    $obj_name = 'CommonObject\'.$obj_name;
    return new $obj_name();
}


当然了,我们也可以使用累的反射获取一个实例,最前面两种情况比较简单,不再说了,把最后一个使用了命名空间的用类的反射写一下

function get_obj($obj_name)
{
    $obj_name = 'CommonObject\'.$obj_name;
    $class = new ReflectionClass($obj_name);
    return $class->newInstance();
}

分享到:
为什么我觉得编程就像施魔法一样?
心智的活动,除了尽力产生各种简单的认识外,主要表现在如下三个方面: 将若干简单的认识组合为一个复合认识,由此产生出各种复杂的认识; 将两个认识放在一起对照,不管它们如何简单或者复杂,在这样做时并不将它们合而为一;由此得到有关它们的相互关系的认识; 将有关认识与那些在实际中和它们同在的所有其它认识隔离...
PHP设计模式之访问者模式的实现
在我们的代码编写过程当中,经常需要对一些类似的对象添加一些的代码,我们以一个计算机对象打印组成部分为例来看下: /** * 抽象基类 */ abstract class Unit { /** *获取名称 */ abstract public function getName(); } /** * Cpu类 ...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……