我正在研究这段代码: http://www.w3style.co.uk/a-lightweight-and-flexible-front-controller-for-php-5
作者在其中使用了一个static
函数来实例化一个类。我基本上是一个初学者,我从来没有见过这个。为什么要使用 static
实例化器而不是通常的构造函数?
代码如下:
索引.php
<?php
define("PAGE_DIR", dirname(__FILE__) . "/pages");
require_once "FrontController.php";
FrontController::createInstance()->dispatch();
前 Controller .php
<?php
class FrontController {
public static function createInstance() {
if (!defined("PAGE_DIR")) {
exit("Critical error: Cannot proceed without PAGE_DIR.");
}
$instance = new self();
return $instance;
}
public function dispatch() {....}
最佳答案
这是 PHP 的变通方法,因为它对于这样的东西来说太笨了:
(new SomeClass())->doSomething();
像这样的单行代码在原生 PHP 中是不可能的。这就是为什么有些人将类的实例化包装在静态方法中以使其成为可能:
SomeClass::create()->doSomething();
它有助于保持作用域干净,因为您不需要额外的变量。它看起来像这样,否则:
$instance = new SomeClass();
$instance->doSomething();
unset($instance);
编辑:让我在这里引用 Gordon(来自评论):“静态调用与将函数放入全局范围相同。调用它将始终依赖于全局范围。” 你应该意识到这个事实,因为它会降低你的代码的灵 active 。
关于php - 何时使用 `public static function createInstance()` 而不是通常的构造函数来实例化类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4428316/