lukoBR 0 Denunciar post Postado Janeiro 25, 2010 APAGADO Compartilhar este post Link para o post Compartilhar em outros sites
Anderson Ferminiano 2 Denunciar post Postado Janeiro 25, 2010 n entendi o problema, o seguinte código funciona normalmente <?php class foo { protected $test = 'oi'; protected function test(){ echo 'oi'; } } class fooextends extends foo { function __construct(){ $this->test(); echo $this->test; } } new fooextends(); ?> opa, agora entendi rsrs.. $myController = $this->controller .'Controller'; $this->myClass = new $myController($this->action, $this->arguments); $this->myClass->$myAction($this->arguments); /* myClass é instancia de testeController dentro de Dispatcher */ implemente o método mágico get na classe Dispatcher http://www.php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.members e sugestão implementar spl_autoload_register (__autoload) na classe Object também http://br.php.net/manual/en/function.spl-autoload-register.php Compartilhar este post Link para o post Compartilhar em outros sites
lukoBR 0 Denunciar post Postado Janeiro 25, 2010 APAGADO Compartilhar este post Link para o post Compartilhar em outros sites
Anderson Ferminiano 2 Denunciar post Postado Janeiro 25, 2010 faça assim function __get($name) { if (isset($this->$name)) return $this->$name; elseif (isset($this->myClass->$name)) return $this->myClass->$name; else return null; } acho que fica melhor, você tem acesso nas variáveis da propria classe, e a da $myClass Compartilhar este post Link para o post Compartilhar em outros sites
lukoBR 0 Denunciar post Postado Janeiro 25, 2010 APAGADO Compartilhar este post Link para o post Compartilhar em outros sites
Anderson Ferminiano 2 Denunciar post Postado Janeiro 25, 2010 substituiria a import, pra carregar a classe necessária em tempo de execução. Compartilhar este post Link para o post Compartilhar em outros sites
lukoBR 0 Denunciar post Postado Janeiro 25, 2010 APAGADO Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Janeiro 26, 2010 Má solução, fazer um laço para ver onde tá a classe e tentar inclui-la.. use o: autoload() http://www.php.net/autoload Compartilhar este post Link para o post Compartilhar em outros sites
lukoBR 0 Denunciar post Postado Janeiro 26, 2010 APAGADO Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Janeiro 26, 2010 E no Object, implementar spl_autoload_register para fazer o trabalho de qual função? spl_autoload_register — Register given function as __autoload() implementation spl_autoload_register http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://br2.php.net/manual/en/function.spl-autoload-register.php Uma boa sugestão acho que seria criar um array com as pastas onde ficam os arquivos com as classes e ir checando uma a uma com um foreach ou um while... Má solução, Simples assim, 'Má solução' Mas o autoload() carrega de uma unica pasta, para usar varias pastas tenho que usar o while e/ou o foreach para checar... Não vou comentar sua import, vou apenas ilustrar como se fazer esse trabalho: <?php abstract class Loader { private static $started = false; public static function __autoload( $class ){ echo __METHOD__ , ' chamado para ' , $class , PHP_EOL; require sprintf( '%s.php' , $class ); } public static function load( $class ){ spl_autoload_call( $class ); } public static function start(){ if ( !self::$started ){ spl_autoload_register( array( __CLASS__ , '__autoload' ) ); self::$started = true; } } public static function setIncludePath( array $includePath , $overWrite = false ){ $oldip = explode( PATH_SEPARATOR , ini_get( 'include_path' ) ); foreach ( $includePath as $key => $path ){ if ( ( $includePath[ $key ] = realpath( $path ) ) === false ){ unset( $includePath[ $key ] ); } } ini_set( 'include_path' , implode( PATH_SEPARATOR , (bool) $overWrite ? $includePath : array_unique( array_merge( $oldip , $includePath ) ) ) ); if ( !self::$started ) self::start(); } } Perceba o método setIncludePath, esse método é que fará o trabalho do seu loop. O método load fará o trabalho da sua import, imagina a seguinte hierarquia: / /index.php /application /application/org /application/org/lib/interface /application/org/lib/interface/ITeste.php /application/org/lib/Teste.php /application/org/lib/Loader.php /application/com /application/com/Testar.php /application/org/lib/interface/ITeste.php <?php interface ITeste { public function testando(); } /application/org/lib/Teste.php <?php class Teste implements ITeste { public function testando(){ echo 'Um teste'; } } /application/com/Testar.php <?php class Testar implements ITeste { private $teste; public function __construct(){ $this->teste = new Teste(); } public function testando(){ $this->teste->testando(); } } /index.php <?php require 'application/org/lib/Loader.php'; Loader::setIncludePath( array( 'application/org', 'application/org/lib', 'application/org/lib/interface', 'application/com' ) ); Loader::load( 'Testar' ); $teste = new Testar(); $teste->testando(); A saída será: Loader::__autoload chamado para Testar Loader::__autoload chamado para ITeste Loader::__autoload chamado para Teste Um teste Você poderia utilizar também um diretório que não está no include_path mas que seu antecessor está, passando o nome da diretório, por exemplo: Supondo que tenhamos UmaPasta dentro de /application/org/lib e dentro de UmaPasta tenhamos UmaClasse.php, assim: /application/org/lib/UmaPasta/UmaClasse.php Para chamar UmaClasse você faria assim: Loader::load( 'UmaPasta/UmaClasse' ); ;) Compartilhar este post Link para o post Compartilhar em outros sites
lukoBR 0 Denunciar post Postado Janeiro 26, 2010 APAGADO Compartilhar este post Link para o post Compartilhar em outros sites
lukoBR 0 Denunciar post Postado Fevereiro 13, 2010 APAGADO Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 13, 2010 Os tópicos marcados como [Resolvido] não são fechados, pois podem aparecer novas soluções, ou servirem de ajuda para membros que pesquisarem. Por isso, apenas é adicionada a informação no título, e o tópico continua aberto. Segundo as diretivas do fórum iMasters, por isso também não posso remover o código do post que você pediu. Compartilhar este post Link para o post Compartilhar em outros sites