J'ai une classe personnalisée appelée Error
que je charge automatiquement avant toute autre chose. Dans ma classe personnalisée, j'ai un constructeur et un singleton fonction Obtenir comme ceci:PHP7: La fonction de classe statique ne peut pas être appelée/vue jusqu'à ce que la classe soit instanciée
class Error
{
// Singleton object. Leave $me alone.
private static $me;
public $errors; // Array of errors
public $style; // CSS rules to apply to error elements
private function __construct($style = "border:1px solid red;")
{
$this->errors = array();
$this->style = $style;
}
// Get Singleton object
public static function getError()
{
if(is_null(self::$me))
self::$me = new Error();
return self::$me;
}
//...
}
Dans mon maître comprennent, je me suis toujours préparé un singleton de cette classe personnalisée avant la logique de base:
$Error = Error::getError();
Cependant, en PHP 7 ce me donne maintenant une erreur:
Fatal error: Uncaught Error: Call to undefined method Error::getError()
Pouvez-vous me aider à comprendre pourquoi cela ne fonctionne plus? J'ai essayé cela au lieu de vérifier si la classe d'erreur est en cours de chargement du tout, et il ne fonctionne (et appelle le constructeur):
$Error = new Error();
D'une certaine façon je ne peux pas appeler la fonction de classe statique à moins que j'ai instancié cette classe. Cela va casser beaucoup d'autres logique que j'ai si c'est vraiment un changement dans php7.
PHP7 possède une classe 'Error' intégrée. Vous rencontrez probablement des erreurs d'espace de noms. Votre classe 'Error' existe-t-elle dans un espace de noms personnalisé? http://php.net/manual/fr/class.error.php –
Si vous êtes en mesure de passer en permanence à PHP 7 (votre code n'a plus besoin de fonctionner sous 5.x), vous pourriez peut-être simplement adopter le code interne. Classe 'Error' à la place de la vôtre. –
@MichaelBerkowski merci, cela semble la cause la plus probable, quel affrontement malheureux. Heureusement, c'est facile pour moi de travailler passé, car un seul endroit appelle la fonction d'initialisation statique pour ma classe Error. Je vais vérifier si c'est la cause. N'hésitez pas à ajouter le commentaire "built-in" de l'espace de noms en guise de réponse. Je vais le marquer si cela me permet de résoudre le problème. – Tiago