【问题标题】:Can I use a PHP class variable as dynamic return definition?我可以使用 PHP 类变量作为动态返回定义吗?
【发布时间】:2023-03-17 06:03:01
【问题描述】:

我在 PHP 中实现了一个抽象类,它管理我所有的数据库连接。这个类有我需要的所有基本方法,比如写、读、删除……

现在要使用这个类,我正在为每个数据库表创建一个特殊的类:

class Data_Store_Snacks extends Data_Store_Abstract {

    public function __construct() {
        $this->table       = Install::SNACKS_TABLE_NAME;
        $this->primary_key = 'id';
        $this->model       = Data_Store_Snacks_Model::class;

        parent::__construct();
    }
}

在上面的类中,我设置了应该返回的表、主键和模型。问题是在这个类上面的抽象类中,我有这个方法例如:

/**
 * Retrieves multiple table rows as an array, filtered by the where
 *
 * @param array $where
 * @param array|null $order_by
 * @param int|null $limit
 * @param int|null $offset
 *
 * @return array|false
 */
public function find_all_by( array $where, array $order_by = null, int $limit = null, int $offset = null ) {

目前,它返回一个数组或 false。我想将模型作为数组返回,而不是数组,例如:

@return Data_Store_Snacks_Model[]|false

这可行,但不能用于一张以上的桌子!相反,我需要一些动态的东西,比如:

@return $this->model[]|false

但据我所知,这是不可能的。目前,我在 foreach 中使用 @var 定义,但我不喜欢这样做只是为了让我的方法在我的 IDE 中可用

有什么想法吗?

【问题讨论】:

  • 这能回答你的问题吗? PHPDoc type hinting for array of objects?
  • @PeterKrebs 不,因为他们都在使用静态模型。我说的是动态提示..
  • 您可以在个别课程上使用@method 吗?我知道它不是动态的,但将它一次性扔到你的个人课程上也不应该太难。
  • @ChrisHaas 这就是我目前正在做的,但有好几次。我希望有一种方法可以将保存到类变量的模型作为类型返回...
  • 我的直觉说不,这显然不是一个权威的答案。您的用例完全有效,但我认为没有办法既准确又笼统地描述它。

标签: php


【解决方案1】:

不是你描述的方式,但你可以像这样为你的模型添加一个接口:

interface Model_Contract{}

class Data_Store_Snacks_Model implements Model_Contract {}
class Data_Store_Drinks_Model implements Model_Contract {}

/**
 * ...
 * @return Model_Contract[]|false
 */

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    相关资源
    最近更新 更多