PHP でオートローディングがどのように機能するかについて、まだいくつかの誤解があるようです。
メイン関数内にあるというクラスがglueあり、ここでは次のように呼び出されます。spl_autoload_registerrun
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;
}
}