2012-12-21 77 views
1


任何人都知道如何重新声明函数?
例如:PHP中的redeclare类

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

,输出是: 不能重新声明类
所以我试图将类命名为一个变量:

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

//Code 

class $foo{} 

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

而且它仍然不工作...
有什么建议吗?

+1

嗯,好了那是因为你不应该这样做。类和函数应该有唯一的名称。 – thatidiotguy

+0

你不能。就像你不能重新定义一个函数一样。无论如何,你为什么要这么做?如果您需要使用不同代码“重用”函数名称,请改为使用闭包。 –

+1

为什么?你为什么还想要? –

回答

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 
0

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

0

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

+0

删除该答案并将其作为评论发布。它根本没有回答这个问题...... – shadyyx

0

我想你要寻找的是创建一个类的新实例:

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

//Code 

$obj2 = new $foo(); 
0

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

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

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

4

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

0

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

class Foo{} 

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

首先:不要这样做。

也就是说,如果你真的需要“refedine”一类,你可以使用一个包装类这样做

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

还是那句话:不要没有一个非常,非常充分的理由这样做!

免责声明:这个实现不仅仅是粗糙的,它只是运输这个想法的必要条件。