Hepimiz rezil "sınıfını Redeclare" hata biliyorum. Bu üstesinden gelmek ve aslında aynı adla yeni bir sınıf bildirmek için herhangi bir yöntem var mı, yoksa bu PHP 5 imkansız mı?
As Pekka and Techpriester both pointed out: no, you cannot. However, if you're using PHP >= 5.3, then you can use namespaces and the "use" construct to effectively "redeclare" the class. Here's an example:
// MyClass.php
class MyClass {
const MY_CONST = 1;
}
// MyNamespaceMyClass.php
namespace Mynamespace;
class MyClass {
const MY_CONST = 2;
}
// example.php
require_once 'MyClass.php';
require_once 'MyNamespaceMyClass.php';
use Mynamespace\MyClass as MyClass;
echo MyClass::MY_CONST; // outputs 2
Sınıfım şimdi isimalanlı sınıfa gelir olarak Böylece, sizin, istenen sonucu var.
Bu imkansızdır. Kullanım durumunda bağlı olarak, söz jpfuentes2 gibi ad alanları, sizin için işe yarayabilecek.
Bir hack bir özel yeni "operatörü" uygulamaktır.
Example:
$GLOBALS['class_map'] = array('A' => 'A');
function _new($class){
$realClass = $GLOBALS['class_map'][$class];
return new $realClass;
}
class A {}
$a = _new('A');
// change the implementation
$GLOBALS['class_map']['A'] = 'B';
$a2 = _new('A');
Başka bir hack runkit bir sınıf yeniden uygulamak için kullanmaktır.
Temelde bir sınıf redeclare olamaz. Eğer gerçekten istiyorsanız, yapabilirsiniz. :) Her şey mümkün. Bu yapısını değiştiren bir sınıf, ihtiyacınız dynamically? Sen sihirli yöntem __ çağrısı ve desen Devlet kullanabilirsiniz.
class Example
{
var $state;
public function setImplementation($state)
{
$this->state = $state;
}
public function __call($method, $args)
{
if (method_exists($this->state, $method))
return $this->state->$method($args);
else
// error
}
}
Dinamik sınıfları ile oynamak için bir PHP araç da vardır: http://php.net/manual/en/book.runkit.php
Ben redeclaring sınıf ve yöntemleri Ruby mümkün olduğunu biliyorum (ve bir dil tasarımında bir hata olarak düşünün).
Temelde, PHP bir sınıf redeclare olamaz directly
. Eğer php bir sınıf redeclare almak ihtiyacı varsa, o zaman ayrı bir dosyada bu sınıf yazmak ve require_one
İstediğiniz sayfaya bu dosyayı aramak için kullanmanızı öneririm. Aşağıdaki gibi:
Page1.php
class abcd
{
function max()
{
echo "Hello World!!! count:-".$GLOBALS['x'];
}
}
Page2.php
$i=10;
for($x=0;$x<$i;$x++)
{
require_once "Page1.php";
$myclass = new abcd();
$myclass->max();
}
Now it will work as you desired. Bu me için çalıştı.
Aşağıdaki gibi çıkış olacaktır:
Hello World!!! count:- 0
Hello World!!! count:- 1
Hello World!!! count:- 2
Hello World!!! count:- 3
Hello World!!! count:- 4
Hello World!!! count:- 5
Hello World!!! count:- 6
Hello World!!! count:- 7
Hello World!!! count:- 8
Hello World!!! count:- 9