PHPシステム構築

<< functionを利用して、出力を共通化。 質問一覧 PHPで作成された独自CMSをHTMLタグ入... >>

  • 募集中!! 300P
Zend_Loader_Autoloaderの設定方法

以下のようなディレクトリ構成の場合、
クラスファイルをautoloadさせるにはどうすれば良いのでしょうか?

MyLib/A.php (class A)
MyLib/A/B.php (class A_B extends B)

MyLibはインクルードパスに入っています。実パスは環境で変わってしまいます。

  1. // client.php
  2. require_once 'Zend/Loader/Autoloader.php';
  3. $autoloader = Zend_Loader_Autoloader::getInstance();
  4.  
  5. // Zendディレクトリ以下は問題ありません。
  6. var_dump(new Zend_Mail_Transport_Smtp);
  7.  
  8. // しかし、MyLib以下は効きません。
  9. var_dump(A_B::getInstance());
  10. //=> Fatal error: Class 'A_B' not found

$autoloader->setFallbackAutoloader(true);
とすると通るのですが、Symfonyのローダーが効かなくなってしまう
//=> Warning: Zend_Loader::include(sfPropelDatabase.php) : failed to open stream: No such file ...
ようなので、setFallbackAutoloader(true) 以外の方法で解決したいのですが、
どうすれば良いのか解る方いらっしゃいますでしょうか?
QZend_Loader_Autoloaderの設定方法 karakiz  [07月09日 16時30分] NEW!
┣Re:Zend_Loader_Autoloaderの設定方法 signal  [07月10日 09時31分] NEW!
┃┗Re:Re:Zend_Loader_Autoloaderの設定方法 karakiz  [07月10日 12時18分] NEW!
┃  ┗Re:Re:Re:Zend_Loader_Autoloaderの設定方法 signal  [07月10日 21時01分] NEW!
┃    ┗検討します karakiz  [07月10日 22時51分] NEW!
┗Re:Zend_Loader_Autoloaderの設定方法 wintermute  [07月10日 13時11分] NEW!
  ┗client.phpは単なる例です karakiz  [07月10日 16時04分] NEW!
    ┗Re:client.phpは単なる例です wintermute  [07月10日 16時21分] NEW!
      ┗勉強になりました karakiz  [07月10日 18時09分] NEW!

コメント一覧

並び替え( ツリー順 / 投稿順[降順] / 投稿順[昇順]

Re:Zend_Loader_Autoloaderの設定方法

set_include_path
http://www.phppro.jp/phpmanual/php/function.set-include-path.html
を参考にしてみて、include_path に MyLib を追加してみてください

Re:Re:Zend_Loader_Autoloaderの設定方法

signal様
お世話になっております。

既に、
MyLibはインクルードパスに入っています。

  1. require_once 'A/B.php';
  2. //=> MyLibがinclude_pathに入っているのでエラー発生しない。

Re:Re:Re:Zend_Loader_Autoloaderの設定方法

Zend_Loader_Autoloader の使い方がいまいちわからないので

PHP5であれば
http://jp2.php.net/manual/ja/language.oop5.autoload.php
を使って実装してみてはいかがでしょうか

検討します

ありがとうございます。
もう少し待ってから検討してみます。

Re:Zend_Loader_Autoloaderの設定方法

> Symfonyのローダーが効かなくなってしまう
この部分にだけ注目して答えますが

「client.php」という名前自体が、Symfonyの命名規則に合っていませんよ。

# 恐らく、もう少しフレームワークというものについて理解する事が必要かと

client.phpは単なる例です

失礼しました。
実際は client.php というファイル名ではありません。
クラスを利用する側(クライアント)のファイルという意味で書いてしまいました。

しかし、実際に client.php という名前であったとしても
問題には何も影響していないように思うのですが...

> # 恐らく、もう少しフレームワークというものについて理解する事が必要かと 
どういう意味ですか?

Re:client.phpは単なる例です

> どういう意味ですか? 
これを説明するのは難しいですね

symfonyでは、基本的なアプリケーションならば、actions.class.phpと、{action name}Success.php、{action name}Error.phpしかスクリプトを書くような所はありません。

以上の事は、symfonyのチュートリアルを勉強していればわかっているはずなのですが、書かれている内容からすると、チュートリアルを勉強していない、という事ですよね?

基本となる前提の部分が無い人に説明するのはちょっと時間がかかりすぎます。

勉強になりました

>>>>> # 恐らく、もう少しフレームワークというものについて理解する事が必要かと
>>> どういう意味ですか?
>> これを説明するのは難しいですね

フレームワークについて説明しろとは誰も言ってませんよ。

あなたは私の質問を見て、
>>>>> # 恐らく、もう少しフレームワークというものについて理解する事が必要かと
と言いました。
私の質問を見て、「フレームワークの利用に際し、致命的な理解不足がある」
と判断されたわけですよね?

それは具体的にどういうことなのですか?
どうぞ率直に言ってしまってください
と尋ねたわけです。

それほど大きな過ちだったら、簡単に指摘できるはずではありませんか?

Symfonyの命名規則云々が大間違いだというなら Symfony の理解不足といえるかもしれませんが、
「フレームワークというもの」に対する理解とは関係ない話でしょう。


> symfonyでは、基本的なアプリケーションならば、actions.class.phpと、
> {action name}Success.php、{action name}Error.phpしかスクリプトを書くような所はありません。

本気ですか!?

その上、基本的なアプリケーション??
なぜここで「基本的なアプリケーション」なるものが登場するのでしょうか?

アクションとテンプレートだけで仕上げるのが「基本的なアプリケーション」というものだとすれば、私が取り組んでいるのは「基本的なアプリケーション」ではありません。

多数の独自ファイルをSymfonyアプリの中で使っていますが、特に問題のある手法だとは思っていません。


> 以上の事は、symfonyのチュートリアルを勉強していればわかっているはずなのですが、
> 書かれている内容からすると、チュートリアルを勉強していない、という事ですよね?

チュートリアルを完璧に理解してはいませんが、
「アクションとテンプレート以外でコードを書くような奴は最低レベルの勉強不足野郎だ!」
という認識の方が理解不足なのでは... ?


ご返信ありがとうございました。
勉強になりました。
functionを利用して、出力を共通化。 質問一覧 PHPで作成された独自CMSをHTMLタグ入...