1

クロージャーを使用してクラスを「再宣言」する方法を見つけようとしています。これは私がこれまでに持っているものです:


名前空間を除いて同一の 2 つの単純なクラスがあります。test2.php の名前空間は「bla」と呼ばれ、new.php では「newname」と呼ばれます。それ以外は、まったく同じです。

namespace bla; //test2.php
class A
{
    public function __construct()
    { }

    public function bla()
    {
        echo '[A bla]';
    }
}

include ("new.php");
include ("test2.php");

use newname\A as A; // <-- dynamic

$a = new A();
$a->bla();

したがって、このコードは、'test2.php' のクラスではなく、'new.php' クラスのメソッドを実行するだけです。これは実際に私が必要とするものです。しかし、私の問題はコードの最後の部分です。通常、私は名前空間を使用していたでしょう:

$a = new bla\A(); //Defined in 'test2.php'
$a->bla();

しかし、「use as」ステートメントのため、その行を次のように変更する必要があります。

$a = new A(); //Defined in 'test2.php'
$a->bla();

したがって、「A()」の前に名前空間がありません。

「bla\A()」名前空間 (test2.php で定義されている) を保持する方法はありますが、「new.php」からメソッドを呼び出しますか??

4

2 に答える 2

1

この場合、各クラスから呼び出すには => と書く必要があります。

$bla = new bla/A("");
$bla->bla();        // to call from bla.php

そして二等

$newname = new newname/A("");
$newname->something(); // to call from newname.php

それは機能します。 use キーワードでスクリプトを酷使する必要はありません

また、次のような名前空間を持つ 1 つのファイルにクラスを記述することもお勧めします =>

namespace bla{
     class A{
        // content
     }
}

namespace newname{
     class A{
        // content
     }
}
于 2012-04-09T11:04:02.807 に答える