【问题标题】:PHP class constructionPHP类构建
【发布时间】:2011-11-02 20:03:51
【问题描述】:

我正在尝试编写一个简单的类:

class tempClass 
{
    private $myvar          = null;

    function __construct()
    {
        $this->myvar    = 'temp';
        var_dump($this->myvar);
    }  

    public function getmyvar(){
        return $this->myvar;
    }
}   

当我从包含此类的页面调用getmyvar() 公共函数时(使用语法tempClass::getmyvar();),在我可以访问公共函数之前,不应该自动调用__construct() 方法吗?似乎没有——我必须这样做:

$myclass = new tempClass();
$myclass->getmyvar();

为了调用构造函数。有没有办法在调用类函数时“自动构造”这个类,而不必在每个函数中执行__construct 代码?

谢谢!

【问题讨论】:

  • 措辞恰当的问题。感谢您抽出时间使用概念验证示例来演示您的问题,而不是使用包含不必要细节的 生产 代码。

标签: php class


【解决方案1】:

当对象实例被“构造”时,构造函数被调用。换句话说,它发生在实例创建时。

当你执行这一行时:

$myclass = new tempClass();

实例化一个新对象,并执行构造函数。

当您使用:: 时,不会实例化任何对象,因此不会调用构造函数。

【讨论】:

  • 谢谢乔治——有没有办法调用“self::__construct()”或类似的东西?
  • @julio - 如上所示使用new 关键字调用__construct()
  • @julio:我认为没有办法直接将其作为静态函数调用,但您也许可以创建一个调用它的方法:public static function mywrapper() { $this->__construct(); }
【解决方案2】:

如果你愿意,你仍然可以进行静态调用,你只需要在你的类中添加一个静态方法:

class tempClass
{
    public static function getVar()
    {
        $myclass = new tempClass();

        return $myclass->getmyvar();
    }
}

echo tempClass::getVar();

现在看起来不多,但将来您可以添加更多逻辑,而且当您逐步升级到工厂模式和单例时,这是一个很好的起点。

【讨论】:

    猜你喜欢
    • 2012-05-11
    • 2013-03-14
    • 2013-12-16
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多