Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Chezz

[Resolvido] Include para carregar todas as classes necessárias

Recommended Posts

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

pesquise pelo __autoload()

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.