在PHP中是否可以像C++一样创建类模板?PHP可能没有类似的语言结构(例如C++中的template关键字),但也许有某些聪明的技巧可以实现类似的功能?
我有一个Point类,我想将其转换为模板。在类中,我使用了类型参数,因此,对于要传递给Point方法的每个类,我都希望创建一个具有适当类型参数的新的Point类副本。
以下是C++示例:
在PHP中是一样的,但它根本不起作用(当然,倒数第二行会返回一个错误):
我有一个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;