【问题标题】:PHP equivalent to C++ TemplatesPHP 等效于 C++ 模板
【发布时间】:2019-01-25 03:31:49
【问题描述】:

在 C++ 中,我可以像这样创建模板类:

<template class l> class foo {
    private:
    l myVar;

    foo::foo(l var) {
        myVar = var
    }

    l getVar() {
        return myVar
    }
    // etc...
}

我可以在 PHP 中做类似的事情吗?

我问的原因:

假设我在 PHP 中有一个概念化 MySQL 表的类:

class Table {
    private $conn;
    private $name;

    function __construct($connection, $tablename) {
        $this->conn = $connection;
        $this->name = $tablename;
    }
    // etc..
}

我可以制作处理某些类型查询的类函数:

    function GetAll() {
        $sql = "SELECT * FROM " . $this->name;
        $data = $this->conn->query($sql);

        return $data;
    }

当然,这只是一个例子,但希望你能明白。

我想做的是假设我有一个名为“用户”的类。在我返回 $data 之前,我想把它放在一个用户对象中。当然,为了通用,我希望能够将它放入我喜欢的任何课程中。就像一个 C++ 模板。

注意:PHP 接口对此不起作用,因为我需要实例化该类,而不仅仅是使用给定的一组函数。

编辑:

所以,我 found a workaround 解决我的问题。

但是,我仍然想知道是否有 PHP 等价物。

【问题讨论】:

  • 我会留给更有经验的社区成员来决定这里是否有重复,。也就是说,这个 SO 问题:可能会提供一些见解:stackoverflow.com/questions/9646397/…
  • 这是有效的 PHP 代码吗? $var1 = new get_class($var2)(/*params*/);
  • 很遗憾,我不是 PHP 专家,所以我不能肯定。我在扫描 C++ 问题时发现了这个问题。出现我链接的答案的谷歌搜索是“通用编程 php”。该搜索还出现了许多页面,这些页面似乎表明 PHP 中缺乏泛型是社区关注的一个问题。在这种情况下,“泛型”是 C++ 所称模板的更通用名称。
  • 知道了。谢谢您的帮助。我不认为它完全是重复的,因为它不能解决我的确切问题。但这无疑为我指明了正确的方向。谢谢。

标签: php c++


【解决方案1】:

所以,我想出了一个解决方法,但我仍然希望得到其他答案。我仍然想知道是否有 PHP 等价物。但是,这就是我所拥有的:

class Table {
    private $conn;
    private $name;
    private filter; // a callback

    function __construct($connection, $tablename, $callback) {
        $this->conn = $connection;
        $this->name = $tablename;
        $this->filter = $callback;

    }
    // etc..
}

然后在 GetAll 中:

    function GetAll() {
        $sql = "SELECT * FROM " . $this->name;
        $data = $this->conn->query($sql);

        $data = $this->filter($data);

        return $data;
    }

然后,我可以传递一个回调,按我想要的方式过滤数据。

我认为这会奏效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多