1


関数を再宣言する方法を知っている人はいますか?
例えば:

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

そして、出力は次のとおりです。 クラスを再宣言できない
ので、クラスに変数として名前を付けようとしました。

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

//Code

class $foo{}

編集:データベーステーブルがあり、テーブルユーザーの「while()」ループからデータを読み取っています。
テーブルを使用していくつかの情報をエコーするクラスがあります。それが理由です。

そして、それはまだ機能していません...
何か提案はありますか?

4

9 に答える 9

4

同じ名前のクラスを複数持つ場合は、名前空間を使用する必要があります。

于 2012-12-21T16:14:53.990 に答える
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 に答える
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つ以上持つべきではありません。これは機能していません。通訳者はどのクラスが正しいクラスであるかをどのように知る必要がありますか?

2番目のクラスの名前を変更し、必要に応じて拡張します。

編集:同じクラス名が必要な場合、または既存のクラスがある場合は、名前空間を使用します。

于 2012-12-21T16:14:52.207 に答える
0

クラスの2つのインスタンスが必要な場合は、2つの異なるvarialbesとして2回初期化できます。

class Foo{}

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

PHP名前空間を使用して、同じ名前で目的が異なるクラスを宣言します。

于 2012-12-21T16:16:23.467 に答える
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 に答える