phpのクラスのオートロードの失敗の解決策とサンプルコード
1. 対応するPHPコードファイルを開きます。
2. 2. "$class = str_replace("\","/",$class);" というコードを追加してください。
このファイルは、ローカルのWinシステムで例外なくテストされ、コードは以下の通りです。
function stu_autoload($class){
if(file_exists($class.".php")){ require ( $class.".php");
}else{ die("unable to autoload Class $class");
}
}
spl_autoload_register("stu_autoload");
Ubuntu サーバーにデプロイすると、例外的に、クラス xxxxxx をオートロードできないというエラーが報告されます。
解決方法
エラー報告によると、$classの値をstuAppdaoStuInfoのような形にしないと動作しないことと、ファイルパスを "second "から"/"にエスケープする必要があることがわかったので、一行追加することにしました。
$class = str_replace("\\\","/",$class);
要約すると、修正したオートロードのコードは次のようになります。
function stu_autoload($class){
//path escaping
$class = str_replace("\\\","/",$class); if(file_exists($class.".php")){ require ( $class.".php");
}else{ die("unable to autoload Class $class");
}
}
spl_autoload_register("stu_autoload");
<スパン ナレッジの拡大。
クラスのオートローディング
外部ページにクラスファイルを導入する必要はなく、必要なときにプログラムが自動的にクラスを "動的にロード"します。
オブジェクトを新規に作成する場合
クラス名を直接使用する(静的なプロパティやメソッドの操作)
spl_autoload_register() を使用します。
これを使用して、__autoload()の代わりに動作することができる複数の関数を登録(宣言)します。当然、これらの関数を定義する必要があり、関数は__autoload()と同様に動作しますが、そうすれば、より多くのシナリオに対処することができます。
//register the functions for autoloading
spl_autoload_register("model");
spl_autoload_register("control");
// Define two separate functions
function model($name){
$file = '. /model/'. $name.'.class.php';
if(file_exists($file)){
require '. /model/'. $name.'.class.php';
}
}
//If a class is needed, but the current page doesn't load it yet
//then it will call model() and controller() in turn until it finds the class file to load, otherwise it will report an error
function controll($name){
$file = '. /controll/'. $name.'.class.php';
if(file_exists($file)){
require '. /controll/'. $name.'.class.php';
}
}
// If you are registering a method and not a function, you need to use the array
spl_autoload_register(
//non-static methods
array($this,'model'),
//Static methods
array(__CLASS__,'controller')
);
プロジェクトシナリオの適用
//auto-loading
//controller classes model classes core classes
//for all classes are divided into definable classes and extendable classes
spl_autoload_register('autoLoad');
//process the core classes of the framework first
function autoLoad($name){
//class name and class file mapping array
$framework_class_list = array(
'mySqldb' => '. /framework/mySqldb.class.php'
);
if(isset($framework_class_list[$name])){
require $framework_class_list[$name];
}elseif(substr($name,-10)=='Controller'){
require '. /application/'.PLATFORM.'/controller/'. $name.'.class.php';
}elseif(substr($name,-6)=='Modele'){
require '. /application/'.PLATFORM.'/modele/'. $name.'.class.php';
}
}
今回はphpクラスのオートローディングの失敗の解決策とサンプルコードを紹介しました、もっと関連するphpクラスのオートローディングの失敗の解決策の内容はBinaryDevelopの過去の記事を検索するか、次の関連記事を引き続き閲覧してください、今後ともBinaryDevelopをよろしくお願いします
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン