从自己的方法调用PHP构造函数

我一直在寻找一种方法来调用类的构造函数,类似于“parent :: _ construct”,但对于类本身(类似“self :: _ construct”,虽然这不起作用).为什么这样?考虑以下(不起作用,顺便说一下)……

class A {
  var $name;
  function __construct($name) {
    $this->name = $name;
  }
  function getClone($name) {
    $newObj = self::__construct($name);
    return $newObj;
  }
}

class B extends A {
}

在实际实现中,还有其他属性可以区分B类和A类,但两者都应该具有“getClone”方法.如果在类A的对象上调用它应该产生另一个类A的对象,并且如果在类B上调用它应该产生另一个类B的对象.

当然,我可以通过重写B类中的“getClone”并将类名硬编码到方法中来实现这一点(即$newObj = new B($name)),但是编写方法会更好.一次,告诉它实例化一个自己类的对象,无论该类是什么.

PHP会让我这样做吗?

解决方法:

您可以使用

 $clsName = get_class($this);
 return new $clsName();

但是niko的解决方案也适用于单例模式http://php.net/manual/en/language.oop5.static.php

从php 5.3开始,您可以使用static关键字的新功能.

<?php

abstract class Singleton {

    protected static $_instance = NULL;

    /**
     * Prevent direct object creation
     */
    final private function  __construct() { }

    /**
     * Prevent object cloning
     */
    final private function  __clone() { }

    /**
     * Returns new or existing Singleton instance
     * @return Singleton
     */
    final public static function getInstance(){
        if( static::$_instance == null){
            static::$_instance = new static();
        }
        return static::$_instance;
    }
    
}
?>
上一篇:几个枚举如何扩展包含Java中这些枚举所用方法的类?


下一篇:PHP面向对象-继承