PHP の クラスオートローディングを Linux に持っていったら嵌った話
<?php function __autoload($class_name) { include $class_name . '.php'; } $obj = new MyClass1(); |
Windows 環境で動いていた PHP のコードが Linux 環境に持っていった途端 ファイルのロードエラーが出て嵌ったのでメモです。
php - Autoload classes from different folders - Stack Overflow
function __autoload($className) { $file = $className . '.php'; if(file_exists($file)) { require_once $file; } } Then... you can call classes in three ways: $controller = new application\controllers\Base(); |
こんな例があったのですが、 Linux でファイルを開こうとすると エラーになります。
原因が分かると単純なのですが、理由は二つ
・Linux は大文字小文字を区別する
・パスの区切り文字が "¥"の場合、 Linux には認識できない
特にクラスとして呼び出した場合、クラス名が小文字でも、ファイル名の最初の文字が大文字になるので、Windows でうっかりミスがあると、Linux で読めなかったりします
function php_autoloader($class) { $class = str_replace("\\", "/", $class); include $class . '.php'; } |
autoload の処理はこんな風に "¥" を含む場合 "/" に変換する処理を入れましたとさ
Comments