PHP でオートローディングがどのように機能するかについて、まだいくつかの誤解があるようです。
メイン関数内にあるというクラスがglue
あり、ここでは次のように呼び出されます。spl_autoload_register
run
class glue{
public static function run(){
spl_autoload_register(array('glue','autoload'));
}
}
オートロード機能は、PSR-0 標準を介してロードすることで機能し、絶対パスから機能します。これはすべて、動作などとしてテストされてglue
います。名前空間が付けられていないことに注意してください。
オートロード機能は、 という名前空間をカバーしていますglue
。このネームスペース内に、 というエラー ハンドラがあります\glue\ErrorHandler
。
エラーをトリガーすると、格納された定数で定義されているように、glue
クラスは\glue\ErrorHandler
ルート ディレクトリから PSR-0 表記で自動ロードされます。これは、やROOT
などのクラスでも機能することがテストされています。\glue\User
\glue\Session
それでは、問題です。Call-time pass-by-reference has been deprecated
内部でエラーが発生し、\glue\Validation
オートロード機能が実行されていないようです。
すべてのオートロード関数にどのように入っているかを見ることができますが、そのクラスでこのエラーを呼び出すと、オートローダーをスキップして、エラーハンドラークラスが見つからないと言って救済するようです。
通常、それは私のプログラミングの問題だと思いますが、私はすべてを試しました。この1つのエラーについて、その方法を説明することはできません。私の混乱をさらに悪化させるのは、次のことを引き起こした場合です。
syntax error, unexpected T_ISSET in /media/server_ws/xxxxxxx/glue/Validation.php on line 47
エラーで動作します。その1つのエラーのためのようで、エラーハンドラーを自動ロードしません。
これは、 myspl_autoload_register
がその名前空間にバインドされていないため (動作するエラー ハンドラーが実際には 内から呼び出されるためglue
)、おそらくランダムに動作しているためだと思いました。だから\glue\Validation
私は一度も見たことのないクラスを呼び出しました\glue\util\Crypt
が、それは機能し、オートローダーに正しく入ります。
このエラーを呼び出すと、クラスCall-time pass-by-reference has been deprecated
内からglue
完全に機能します。
誰でもこれに光を当てることができますか?
編集
ここで要求されているのは、の簡略版ですValidation.php
。
namespace glue;
use glue,
\glue\Exception,
\glue\Collection;
class Validation extends \glue\Component{
private function validateRule($rule){
// This is the line, notice the pass by reference down there?
$valid = $validator($field,$field_value,$params,&$this->model) && $valid;
}
}