PHP中的Redeclare类

时间:2012-12-21 16:12:24

标签: php class redeclare


谁知道如何重新声明功能?
例如:

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

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

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

//Code

class $foo{}

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

它还没有用...... 有什么建议吗?

9 个答案:

答案 0 :(得分:4)

如果你想拥有几个同名的课程,那么你应该使用namespaces

答案 1 :(得分:0)

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

答案 2 :(得分:0)

你为什么要重新宣布一个班级?什么时候你可以在任何时候引用它?

答案 3 :(得分:0)

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

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

//Code

$obj2 = new $foo();

答案 4 :(得分:0)

您不应该有2个或更多具有相同名称的类。这不起作用。口译员应该如何知道哪个班级是正确的班级?

更改第二个类的名称,并在需要时扩展它们。

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

答案 5 :(得分:0)

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

class Foo{}

$foo1 = new Foo;
$foo2 = new Foo;

答案 6 :(得分:0)

使用PHP namespaces来声明具有相同名称但目的不同的类。

答案 7 :(得分: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
?>

再说一次:如果没有非常好的理由,不要这样做!

免责声明:此实施不仅仅是粗略的,只是传达这个想法。

答案 8 :(得分:0)

Use PHP NameSpace

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