1

この件に関するサイトを調べましたが、まだ混乱しています。私は自分の問題を修正しましたが、私は一種のだまされたことを深く知っており、それはさらに問題を引き起こす可能性のある修正です. 私がどこにいるのか説明しましょう:

これは、次のようなディレクトリ構造のフォルダーです >> [フォルダー名] :

/site root
[ajax-loads]
   showorder.php

[bcls] << For bespoke classes
   class.order.php

[cls] << For classes
   class.main.php
   class.db.php
   class.sql.php
   ...
   ...

dashboard.php
index.php
config.php

...
.. etc etc

上記のように、使用するクラスを含む 2 つのフォルダーがあることを示しています。そのほとんどは、class.main.php の __autoload を介して呼び出されます。私が抱えている問題は、jQuery を使用して新しいコンテンツを div に「load()」するときです。動作が変更され、自動ロードへのパスは、class.main.php に対してではなく、ajax-load ファイルに対して相対的になります。現時点では、いわばだまされたと感じる次のコードがあります。

//PATHS & AUTOLOAD
set_include_path("./cls");
set_include_path("../cls");
set_include_path("./bcls");
set_include_path("../bcls");
//INVESTIGATE THIS NONESENSE ABOVE!

function __autoload($class_name)
{
    require_once 'class' . '.' . $class_name . '.' . 'php';
}

ファイルの前半で、一時的に修正した config.php ファイルで同じ問題が発生しています。

set_include_path("./");
set_include_path("../");

これは、手続き型コーディングから離れることを決めた私の最初の大きなプロジェクトであり、オートロードを実際に体験したのはこれが初めてです。コピー ペースト コーダーになるのではなく、これをもっとよく理解する必要があります。ここで私の理解のギャップにぶつかったと感じています。コードが修正されるだけでなく、いくつかの「解決策」を試したので、正しいコードが何をしているのかを誰かが親切に説明してくれますが、他の人の例を模倣した後も奇妙な結果が得られます。

愛とキス アンディ

4

1 に答える 1

0

インクルードパスを本当に変更したい場合は、次のように使用する必要があります。

define('BASE_PATH', $_SERVER['DOCUMENT_ROOT']);

// ...

set_include_path(
    BASE_PATH . '/bcls' .
    PATH_SEPARATOR . BASE_PATH . '/cls' .
    PATH_SEPARATOR . get_include_path() .
    PATH_SEPARATOR . '.'
);

ただし、フォルダの名前を変更することをお勧めします。変数、クラス、関数、フォルダーなどをそのように短縮することは強くお勧めしません。ある種のPHPフレームワークの使用を検討しましたか?そうすることはあなたの努力に役立つかもしれません、そしてあなたは車輪の再発明を避けることができます。

軽量にしたい場合は、KohanaまたはCodeIgniterの使用を検討してください。それ以外の場合は、ZendFrameworkをお勧めします。

于 2011-12-19T10:37:11.217 に答える