【问题标题】:php shortest version of calling a classphp调用类的最短版本
【发布时间】:2023-03-26 17:06:01
【问题描述】:

我看到了很多方法可以用来在 PHP 中调用另一个类中的类,我希望您对调用类的最短版本有意见。

假设我们有一个类名视图, 和另一个类名控制器

class View 
{

private $data = array();

private $render = FALSE;

public function __construct($template , $datas = null)
{

    try {
        $file = strtolower($template) . '.php';

        if (file_exists($file)) {
            if($datas > 0) {
                foreach($datas as $data) {
                    array_push($this->data, $data);
                }
            }
            $this->render = $file;
        } else {
            die('Template ' . $template . ' not found!');
        }
    }
    catch (customException $e) {
        echo $e->errorMessage();
    }
}

public function __destruct()
{
    extract($this->data);
    include($this->render);

}
}

require_once "system/autoload.php";

class Controller {

function index() {
   $view = new View('something');
}

我知道我可以使用

 $view = new View('something');

或使用 OOP 和范围并从控制器内部的视图中调用函数,例如

$this->viewFunction();

但是有什么方法可以像这样在控制器内部调用视图类

View('something)

我想让它尽可能短 如果不可能,或者我必须在编译器内部进行更改,只需给我最短的版本

谢谢大家

【问题讨论】:

  • 用这个最短的解决方案你会解决什么任务?
  • 类似于__invoke的东西?
  • 显然不是..
  • 拥有过多的代码(不需要时的临时变量)可能很糟糕,但有时较短的代码变得难以理解并且更容易出错。
  • @AhmadVahedi 恕我直言,代码长度并不重要,更重要的是代码的可读性以及代码应遵守一些原则,例如 SOLD、KISSm YAGNI 等...

标签: php oop backend


【解决方案1】:

您当然可以在 PHP 中做到这一点。看看magic methods, especially __invoke()

class View
{
    public function __invoke(string $template)
    {
        return $template;
    }
}

你可以简单地调用它

$view = new View();
$view('my template');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-28
    • 2011-05-25
    • 2013-02-25
    • 2011-11-15
    • 2021-06-23
    • 2017-01-20
    • 2011-02-05
    • 2017-07-20
    相关资源
    最近更新 更多