PHP の クラスオートローディングを Linux に持っていったら嵌った話

PHP: クラスのオートローディング - Manual

<?php
function __autoload($class_name) {
    include $class_name . '.php';
}

$obj  = new MyClass1();
$obj2 = new MyClass2();
?>



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();
$model = new application\models\Page();

こんな例があったのですが、 Linux でファイルを開こうとすると エラーになります。
原因が分かると単純なのですが、理由は二つ

・Linux は大文字小文字を区別する
・パスの区切り文字が "¥"の場合、 Linux には認識できない

特にクラスとして呼び出した場合、クラス名が小文字でも、ファイル名の最初の文字が大文字になるので、Windows でうっかりミスがあると、Linux で読めなかったりします

function php_autoloader($class) {
    $class = str_replace("\\", "/", $class);
    include $class . '.php';
}

autoload の処理はこんな風に "¥" を含む場合 "/" に変換する処理を入れましたとさ

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です