有人知道如何重新声明功能吗?
例如:
class Name{}
//Code here
class Name{}
输出是:
无法重新声明类
所以我尝试将类命名为变量:
$foo = 'name';
class $foo{}
//Code
class $foo{}
编辑:我有一个数据库表,我正在从表用户“while()”循环中读取数据。
我有一个使用表格并回显一些信息的类。这就是原因。
它仍然无法正常工作......有
什么建议吗?
如果您想拥有多个具有相同名称的类,那么您应该使用namespaces。
没有。PHP 根本不支持现有类的运行时修改
为什么要重新声明一个类?你什么时候可以参考它?
我认为您正在寻找的是创建一个类的新实例:
$foo = 'name';
$obj1 = new $foo();
//Code
$obj2 = new $foo();
您不应该有 2 个或更多具有相同名称的类。这是行不通的。解释器应该如何知道哪个类是正确的类?
更改第二个类的名称并在需要时对其进行扩展。
编辑:使用名称空间,您需要相同的类名,或者如果您有一个现有的类。
如果你需要一个类的两个实例,你可以将它初始化为两个不同的变量;
class Foo{}
$foo1 = new Foo;
$foo2 = new Foo;
namespace A {
class Name {
function __toString() {
return __METHOD__;
}
}
}
namespace B {
class Name {
function __toString() {
return __METHOD__;
}
}
}
namespace C {
echo new \A\Name ,PHP_EOL;
echo new \B\Name ,PHP_EOL;
}
输出
A\Name::__toString
B\Name::__toString
使用 PHP命名空间来声明具有相同名称但用途不同的类。
首先:不要这样做。
也就是说,如果你真的需要“重新定义”一个类,你可以使用包装类来做到这一点
<?php
class foo { //Original definition here };
class bar {
var $baseobj;
function bar($some, $args) {
$this->baseobj=new $which($some, $args);
}
function someMethod() {
return $this->baseobj->someMthod();
}
//...
}
class baz {
function someMethod() {
return "This is the result";
}
//...
}
$obj=new bar($this, $that);
//$obj is now a wrapped foo object
echo $obj->someMethod(); //Will call into foo
$obj->baseobj=new baz($this, $that);
//$obj is now a wrapped baz object
echo $obj->someMethod(); //Will call into baz
?>
再说一遍:不要在没有非常非常好的理由的情况下这样做!
免责声明:这个实现不仅仅是粗略的,它只是为了传达这个想法。