Problemas com Classes PHP

06/02/2016

0

PHP

Boa noite pessoal.
Estou eu aqui de novo para solicitar uma ajuda divina.

OK sem embromar, eu a muitos baixei um sistema que era todo feito em PHP OO.
Na época os servidores eram na sua maioria em PHP 5.2.
Neste tal sistema(eyeOS para os interessados) tem uma classe KERNEL que nela existe a seguinte função:

abstract class Kernel {

 public static function getInstance($class) {   
		if (!isset(self::$Instances[$class])) {
			$object = new $class;
			self::$Instances[$class] = $object;
		}
		return self::$Instances[$class];
	}
}


Notem que a função getInstance solicita um parâmetro $class.

O problema esta exatamente ai, as outras classes que estendem KERNEL não passam este parâmetro e o PHP retorna um erro fatal.

class MMapGroup extends Kernel implements IMMap {
	public static function getInstance() {
		return parent::getInstance();
	}
}


Na época em que peguei este(até então open source) sistema ele funcionava e agora me retorna este erro.
Alguém sabe como resolver isto?
Luiz Régis

Luiz Régis

Responder

Post mais votado

07/02/2016


Na época em que peguei este(até então open source) sistema ele funcionava e agora me retorna este erro.


O mais estranho era funcionar antes, porque agora está normal !

Para essa classe NÃO EXIBIR ERRO ela teria que ter o parâmetro "$class" com default = null, como abaixo:
abstract class Kernel {
 
 public static function getInstance($class=null) {   
        if (!isset(self::$Instances[$class])) {
            $object = new $class;
            self::$Instances[$class] = $object;
        }
        return self::$Instances[$class];
    }
}


Mas mesmo assim não funcionaria porque ela segue o pattern Singleton e por isso precisa do nome da classe para verificar se existe um objeto dessa classe instanciado em memória!

William

William
Responder

Mais Posts

07/02/2016

Luiz Régis

Para essa classe NÃO EXIBIR ERRO ela teria que ter o parâmetro "$class" com default = null, como abaixo:
[...]
Mas mesmo assim não funcionaria porque ela segue o pattern Singleton e por isso precisa do nome da classe para verificar se existe um objeto dessa classe instanciado em memória!


Pois é William, eu tentei isto e até passar a classe em si assim:
class MMapGroup extends Kernel implements IMMap {
    public static function getInstance(__CLASS__) {
        return parent::getInstance();
    }
}


Mas como eu previ o erro continuava.

Eu gostaria muito de tornar este código funcional, trata-se de um webOS. Mas não entendo o erro.
Responder

12/02/2016

Luiz Régis

Se alguém poder ajudar, achei no GitHub um upload do mesmo projeto.

eyeOS

Mas esta com o mesmo erro quando baixado e instalado.
A maioria das classes que acusam este erro estão na pasta eyeos/system/kernel/services/

Alguém me mande uma luz por favor...
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar