Chezz 0 Denunciar post Postado Novembro 2, 2010 Olá pessoal, gostaria de pedir a ajuda de vocês no seguinte.. já ouvi falar que não é interessante carregar os arquivos de outras classes no arquivo da classe que esta usando, para por ex. fazer um extends e carregar a super classe, E sim fazer um script o qual seja uma especie de include central onde ele vá carregar as classes assim que necessário procurando elas em suas pastas e sub pastas. Gostaria de saber se existe algum tipo de design pattern ou tecnica para fazer esse tipo de carregamento... obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Novembro 2, 2010 pesquise pelo __autoload() Compartilhar este post Link para o post Compartilhar em outros sites
Chezz 0 Denunciar post Postado Novembro 2, 2010 Eu já sei como funciona o __autoload() mais será que dentro dele o jeito vai ser fazer varios loops procurando por pastas e sub pastas e verificar se o arquivo existe com file_exists e carrega-lo ? funciona assim mesmo ? não tem outra maneira melhor!? Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Novembro 2, 2010 o jeito vai ser fazer varios loops procurando por pastas e sub pastas e verificar se o arquivo existe com file_exists e carrega-lo ? funciona assim mesmo ? não tem outra maneira melhor!? Você não precisa de loops.... Basta definir seu include_path, por exemplo: Suponha que você tenha o seguinte: application application/config.php application/com application/com/controller application/com/controller/Controller.php application/com/model application/com/model/Model.php application/com/view application/com/view/View.php public public/index.php application/com/controller/Controller.php <?php class Controller { private $model; public function __construct(){ printf( "Construindo %s\n" , __CLASS__ ); $this->model = new Model(); } public function handle(){ $view = new View(); $view->show( $this->model->getName() ); } } application/com/model/Model.php <?php class Model { public function __construct(){ printf( "Construindo %s\n" , __CLASS__ ); } public function getName(){ return 'João Batista Neto'; } } application/com/view/View.php <?php class View { public function __construct(){ printf( "Construindo %s\n" , __CLASS__ ); } public function show( $name ){ printf( "<h1>%s</h1>" , $name ); } } application/config.php <?php $include_path = array( '../application/com/model', '../application/com/view', '../application/com/controller', ); ini_set( 'include_path' , implode( PATH_SEPARATOR , array_unique( array_merge( explode( PATH_SEPARATOR , ini_get( 'include_path' ) ), array_filter( array_map( 'realpath' , $include_path ) ) ) ) ) ); function __autoload( $class ){ require_once sprintf( '%s.php' , $class ); } Agora seu index.php precisa apenas incluir o config: public/index.php <?php require '../application/config.php'; $controller = new Controller(); $controller->handle(); A saída: Construindo Controller Construindo Model Construindo View <h1>João Batista Neto</h1> ;) Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Novembro 2, 2010 Só tome cuidado e deixar a responsabilidade do autoload básica demais por definir muitos diretórios no include_path(), já que quanto maior ele for, menor performance a aplicação terá. Compartilhar este post Link para o post Compartilhar em outros sites
Chezz 0 Denunciar post Postado Novembro 2, 2010 Valeu João e Bruno obrigado por o esclarecimento!! Compartilhar este post Link para o post Compartilhar em outros sites