Inicia uma classe PHP onde o nome da classe é uma variável

1

Preciso de ajuda com um erro que não encontrei antes e não consigo encontrar em lugar nenhum.

Em uma estrutura PHP mvc (apenas de um tutorial), tenho o seguinte:

// Initiate the class
$className = 'Controller_' . ucfirst($controller);
if (class_exists($className)) {
 $controller = new $className($this->registry);
}

$ className está mostrando o nome correto da classe (o caso também está correto). Mas quando eu corro isso eu recebo isso no log de erro do apache (sem erro php)

[Wed Mar 31 10:34:12 2010] [notice] child pid 987 exit signal Segmentation fault (11)

O ID do processo é diferente em todas as chamadas. Estou executando o PHP 5.3.0 no os x 10.6. Este site parece funcionar em 5.2.11 em outro Mac. Não tenho certeza onde ir ao lado para depurá-lo. Eu acho que poderia ser uma configuração do apache, tanto quanto um bug php ou um problema com o código ... alguma sugestão sobre onde procurar a seguir?

O erro não aparece ao comentar esse código. Eu também tenho cerca de 15 outros sites php em execução sem problemas. Incluindo outros usando a mesma estrutura mvc de base

    
por ed209 31.03.2010 / 12:48

4 respostas

2

Eu lembro de ter exatamente o mesmo problema. Se bem me lembro o problema foi instanciação recursiva, ou seja, o PHP ficou sem memória, o que causou a falha de segmentação. Verifique se a instanciação de $ className não gira em círculos.

    
por 21.06.2011 / 17:46
0

Tente isto:

// Initiate the class
$className = 'Controller_' . ucfirst($controller);
if (class_exists($className)) {
     // construct the code string and evaluate it.
     $code='$controller = new ' . $className . '($this->registry);';
     eval($code);
}
    
por 05.04.2010 / 00:31
0

Eu acho que você problema é do seu próprio mac. Se você tentou o site de outro computador e não obteve o erro, então isso significa que você precisará reinstalar o pacote php. Algo deu errado em algum momento com o seu php construído (talvez uma atualização, ou um link destruído por causa da nova instalação ...)

Espero que isso ajude você.

    
por 21.06.2011 / 17:11
0

Tente usar chaves em torno de sua variável de nome de classe. Veja abaixo na linha de atribuição $ controller.

$className = 'Controller_' . ucfirst($controller);
if (class_exists($className)) {
 $controller = new ${$className}($this->registry);
}
    
por 21.06.2011 / 17:16