6

次の簡単なコードがあります。

$a = 'hello';

function myfunc() {
    echo 'in myfunc';
}

class myclass {
    function __construct() {
        myfunc();
        echo $a;
    }
}

$m1 = new myclass();

$a はグローバルスコープにあり、最初にグローバルとして宣言しないとクラス内からアクセスできないため、メソッド内の echo $a は予想どおりエラーを返します。これは PHP のマニュアルに記載されています。

myfunc() の呼び出しは機能しますが、その理由がわかりません。これはグローバル スコープでも宣言されていますが、メソッドは最初にグローバルとして宣言しなくてもアクセスできます。これが機能する理由を説明しているPHPマニュアルには何も見つからないようです。

たぶん、私は PHP をあまりにも長い間使ってきましたが、これはとても単純なことで、その仕組みを忘れてしまいました。クラスメソッド内からグローバル関数にアクセスできると書かれているPHPマニュアルの場所への洞察またはリンクをいただければ幸いです。

前もって感謝します。

4

2 に答える 2

5

関数のスコープはありません (名前空間を使用する場合を除く)。どこでもクラスと変数にはメソッドだけがあります。

うまくいくはずです。すべてが正しいです。一度定義された関数は、どこからでも呼び出すことができます。

于 2013-07-02T23:20:34.957 に答える
4

これが名前空間にとって新しいことかどうかはわかりません...

http://www.php.net/manual/en/language.namespaces.fallback.php

Blockquote 関数と定数の場合、名前空間付きの関数または定数が存在しない場合、PHP はグローバル関数または定数にフォールバックします。

于 2013-07-02T23:25:41.713 に答える