1


有人知道如何重新声明功能吗?
例如:

class Name{}
//Code here
class Name{}

输出是: 无法重新声明类
所以我尝试将类命名为变量:

$foo = 'name';
class $foo{}

//Code

class $foo{}

编辑:我有一个数据库表,我正在从表用户“while()”循环中读取数据。
我有一个使用表格并回显一些信息的类。这就是原因。

它仍然无法正常工作......有
什么建议吗?

4

9 回答 9

4

如果您想拥有多个具有相同名称的类,那么您应该使用namespaces

于 2012-12-21T16:14:53.990 回答
0

没有。PHP 根本不支持现有类的运行时修改

于 2012-12-21T16:14:28.063 回答
0

为什么要重新声明一个类?你什么时候可以参考它?

于 2012-12-21T16:14:44.783 回答
0

我认为您正在寻找的是创建一个类的新实例:

$foo = 'name';
$obj1 = new $foo();

//Code

$obj2 = new $foo();
于 2012-12-21T16:14:50.413 回答
0

您不应该有 2 个或更多具有相同名称的类。这是行不通的。解释器应该如何知道哪个类是正确的类?

更改第二个类的名称并在需要时对其进行扩展。

编辑:使用名称空间,您需要相同的类名,或者如果您有一个现有的类。

于 2012-12-21T16:14:52.207 回答
0

如果你需要一个类的两个实例,你可以将它初始化为两个不同的变量;

class Foo{}

$foo1 = new Foo;
$foo2 = new Foo;
于 2012-12-21T16:16:09.303 回答
0

使用 PHP 命名空间

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
于 2012-12-21T16:46:57.900 回答
0

使用 PHP命名空间来声明具有相同名称但用途不同的类。

于 2012-12-21T16:16:23.467 回答
0

首先:不要这样做。

也就是说,如果你真的需要“重新定义”一个类,你可以使用包装类来做到这一点

<?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
?>

再说一遍:不要在没有非常非常好的理由的情况下这样做!

免责声明:这个实现不仅仅是粗略的,它只是为了传达这个想法。

于 2012-12-21T16:22:35.987 回答