-1

非 OO アプリケーションである SMF フォーラムがインストールされています。フォーラム内のディレクトリに追加のアプリケーションを作成したいと考えています。このアプリケーションには、SMF の SSI ファイルが含まれており、SMF 内の関数を使用しますが、オブジェクト指向の設定になっています。

これが不可能な場合は、ここで読むのをやめて、その理由を説明してください。なぜなら、ここで何が問題なのかを突き止めるのに苦労しているからです (24 時間近く起きていたという事実かもしれません)。

これは私が持っているものです:

SMF にはファイル SSI.php があります - これが含まれている場合、これはグローバル変数のロードを設定し、また定義を設定します

define('SMF', 'SSI');

一連のファイルを含む console というフォルダーがあります。index.php から、サーブレット ファイルを呼び出します。

require_once '../SSI.php';

class Servlet
{

    public function __construct(){

    }

    public function processRequest(){
        echo SMF;
        var_dump($context) //This is the global variable that should be set
    }
}

これにより、SSI が出力され、その後、未定義の変数エラーが出力されます。

これはおそらく非常に明白ですが、コンテキストがグローバルではなく、定義が設定されているのはなぜですか? クラスの外でこれを行うと、うまくいきます。

ありがとう!

-編集-

これがリンクされた質問の複製ではない理由を説明するために...これは、特定のスコープの問題と特定のエラーに関する特定の質問であり、私のアプリケーションに合わせて調整されていること以外は、多くの説明が必要だとは思いませんオブジェクト指向と手続き型プログラミングが混在しているため、混乱が生じます。

私の質問は「可変スコープとは何ですか?」ではありませんでした。

ありがとう。

4

2 に答える 2

2

私のコメントで述べたように、global $context;呼び出す前に置くことができますが、これは本当に悪い習慣であり、大規模なプロジェクトでは大きな問題につながる可能性があります。より良いオプションは、呼び出されるメソッドに必要な変数を渡すことです。たとえば、次のようになります。

<?php
require_once '../SSI.php';

class Servlet
{

    public function __construct(){

    }

    public function processRequest($context){
        echo SMF;
        var_dump($context);
    }
}
$servlet = new Servlet();
$servlet->processRequest($context);

コード例で機能しなかった理由は、クラスがインスタンス化されると、グローバル スコープに対して並列スコープが作成されるためです。したがって$context、パラメーターを介してそこに配置するか、指示しない限り、変数はクラス内に存在しません。 phpglobal修飾子を使用して変数を検索するスコープ。

于 2015-11-04T08:03:16.000 に答える
0

定義した変数の内容とブラケットの間に ' がありません。コピペミスかもしれませんが、念のため。

于 2015-11-04T08:12:24.947 に答える