可以在中创建类模板PHP as in C++? PHP可能没有类似的语言结构(比如template
中的关键词C++),但也许有一些巧妙的技巧可以实现类似的功能?
我有一个Point
我想将其转换为模板的类。在类中,我使用类型参数,因此,对于每个类,我想传递给 Point 方法,我必须使用适当类型的参数创建 Point 类的新副本。
这是样本表格C++:
#include<iostream>
template <typename T>
class Point
{
public:
T x, y;
Point(T argX, T argY)
{
x = argX;
y = argY;
}
};
int main() {
Point<int> objA(1, 2);
std::cout << objA.x << ":" << objA.y << std::endl;
Point<unsigned> objB(3, 4);
std::cout << objB.x << ":" << objB.y << std::endl;
return 0;
}
在 PHP 中也是如此,但它根本不起作用(当然最后一行返回错误):
class SomeClass
{
public $value;
public function __construct($value = 0)
{
$this->value = $value;
}
}
class OtherClass
{
public $value;
public function __construct($value = 0)
{
$this->value = $value;
}
}
class Point
{
public $x;
public $y;
public function Point(SomeClass $argX, SomeClass $argY)
{
$this->x = $argX;
$this->y = $argY;
}
}
$objA = new Point(new SomeClass(1), new SomeClass(2));
echo $objA->x->value . ":" . $objA->y->value . PHP_EOL;
$objB = new Point(new OtherClass(3), new OtherClass(4));
echo $objB->x->value . ":" . $objB->y->value . PHP_EOL;
你能做的最好的就是 PHPeval
-like 功能,对象可以这样实例化:
$className = 'SomeClass';
$obj = new $className;
这与梦幻般的动态类型相结合应该足以允许:
$objA = new Point('SomeClass', 1, 2);
echo $objA->x->value . ":" . $objA->y->value . PHP_EOL;
$objB = new Point('OtherClass', 3, 4);
echo $objB->x->value . ":" . $objB->y->value . PHP_EOL;
必要的定义可能如下所示:
class Point
{
public $x;
public $y;
public function __construct($className, $argX, $argY)
{
$this->x = new $className($argX);
$this->y = new $className($argY);
}
}
不过,我不确定我是否会推广这种代码风格。您原来的方法似乎更清晰、更干净。您可以在内部执行健全性检查Point
如果您愿意,两个参数共享相同类型的构造函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)