1. ホーム
  2. Web プログラミング
  3. PHP プログラミング
  4. phpのヒント

phpのクラスのオートロードの失敗の解決策とサンプルコード

2022-01-15 01:56:02

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をよろしくお願いします