2

簡単な質問がありますが、すぐに答えられるといいのですが。私が書いたコードは名前空間を多用しています(私はどこでも完全修飾名を使用しています)。ただし、コードの一部(自分で作成したものではなく、カレンダー/日付ピッカーコントロール)を含める必要があります。コントロールを作成しようとすると、現在の名前空間(GUI)が想定されるため、次のエラーが発生します。 1852"。現在、カレンダーコントロール自体(およびその基になるクラスファイル)は名前空間を使用しておらず、変更を試みることについて少し心配しています(以前の試みはうまくいきませんでした)。

名前空間に含まれていないコントロールをコードの残りの部分にインポート/含めるにはどうすればよいですか?PHPには「ファイルAS\Calendar \ Calendarからクラスカレンダーをインポートする」のようなものがありますか?

編集: 追加情報:「tc_calendar.php」というファイルに「tc_calendar」というクラスが含まれています。名前空間の一部ではありません。

別のファイルに、いくつかのクラス(Bitmap、CompositeCalendar、EventEditor、TimeExtractor)があり、すべて適切な名前空間(GUI、Data、Extractなど)に含まれています。

GUI名前空間内に含まれるそれらのクラスの1つであるCompositeCalendarで、tc_calendarのインスタンスを作成しようとしています。ただし、PHPはエラーをスローしています(上記)。tc_calendarは名前空間の一部ではありません(そして、PHPがそれを見つけることができないためにPHPが想定しているGUI名前空間の一部ではありません)、そして私はそれのインスタンスを作成する助けが必要です。

tldr; $ newcontrol = new tc_calendar()は機能しません。PHPはその名前空間を推測しようとします(tc_calendarは名前空間の一部ではないため、名前空間が指定されていないため)、\ GUI \ tc_calendarを思い付きます(明らかに間違っています)。名前空間内から、名前空間内に含まれていないクラスにアクセスするにはどうすればよいですか?

4

2 に答える 2

3

あなたはこのようなことを意味しますか?

namespace GUI;

use \tc_calendar as Calendar;

$myCalendar = new Calendar();

as Calendarオプションです。tc_calendarを省略した場合は、元の名前のままにしておくこともできますas Calendar

アップデート

コメントの形にするには:

namespace {
    class tc_calendar {} 
}
namespace GUI {
    use \tc_calendar;

    class CompositeCalendar { 
        private function blah() { 
             $control = new tc_calendar();   
             $control->stuff(); 
        } 
    }
}

ただし、外部ライブラリをコピーして同じファイルに貼り付けることはしません。それは悪い習慣です。それらを別のファイルに保存してから、それらを含めて、次のものを用意することをお勧めします。

namespace GUI;

use \tc_calendar;

require_once 'tc_calendar.php';

class CompositeCalendar { 
        private function blah() { 
             $control = new tc_calendar();   
             $control->stuff(); 
        } 
}

または、私の3つのスニペットを組み合わせて、他の好きな形にします。

tc_calendarまた、 :に基づいてカレンダークラスを構築している場合は、カレンダーを拡張することをお勧めします。

namespace GUI;

use \tc_calendar;

require_once 'tc_calendar.php';

class CompositeCalendar extends tc_calendar { 
        private function blah() {  
             $this->stuff(); 
        } 
}
于 2012-04-09T19:58:30.167 に答える
3

名前空間にないクラスは、自動的にグローバル名前空間に含まれます。
どこからでもグローバル名前空間内のすべてを参照するには、前に1つ使用します\

new \tc_calendar;
于 2012-04-10T01:13:59.883 に答える