Bonsoir tout le monde, voilà une sacré erreur que je viens de récupérer, j'ai un peut chercher sur internet, mais rien pour régler mon problème, on trouve simplement que cette erreur correspond au fait qu'un ":" à été inatendu dans le code

// Si le controller à une table, on précise celle ci, sinon on prend le nom du controller
                if(isset($controller::$table)) {
                    $table = $controller::$table;
                }
                else {
                    $table = $this->request->controller;
                }

Voilà la ligne du problème
if(isset($controller::$table)) {

Il en va de même pour toutes les lignes avec
$controller::$table

Apparemment sa ne se fait pas comme ça =S en local je n'es aucun problème mais sur mon serveur impossible de résoudre ce problème.
Si je remplace ma variable $controller par le nom du controller

Nomcontroller::$table

Alors là sa marche, seulement, comme son nom l'indique c'est une variable, donc pour une classe portant un autre nom, sa ne marche plus, je suis donc obligé de garder le $controller

Je sais que je pourrais faire

$controller = new $controller();
$controller->$table

Mais cette classe est déjà chargé, donc je n'es pas envie de la rechargé pour rien.

Une solution ?
Merci d'avance.

6 réponses


extrarox
Réponse acceptée

Salut,
Cette façon ne fonctionne que depuis PHP 5.3.0, es-tu d'être dans cette config?

Et si tu faisais plutot une méthode ?
::isDefined($table) ?

Typhon
Auteur

J'aimerais éviter de créer une méthode isDefined() dans chacun de mes controller, la variables $table est en static
, elle est donc accessible depuis n'importe où en faisant

NomController::$table;

Sans aucun problème, mais si je fais

$controller = $this->request->controller; // Avec controller = NomController
$controller::$table;

Alors là plus rien ne marche, mais si ce n'est pas réglable sans créer une autre méthode dans mon Controller je le rechargerais =S

Typhon
Auteur

Sa ne marche pas non plus à appelant la classe -_- =S

<?php
class Posts extends Controller {
    static $table = 'Posts';
    function index() {
            ...]
    }

    function edit($id = null) {
                ...]
    }

    function delete($id = null) {
                ...]
    }
}
?>

et

$className = ucfirst($this->request->controller)
$controller = new $className($this->request);
echo $className::$table;
echo $controller->table;

sa me retourne ça
Posts
Notice: Undefined property: Posts::$table

Typhon
Auteur

En faisant
$className::$table
ou
$controller->table
?

Enfin j'ai vérifier et non : PHP Version 5.2.6-1+lenny13

Je suis en train de voir si je peux faire une mise à jour de mon serveur mutualisé, mais je sais pas si je pourrais ='(

Typhon
Auteur

Le service technique m'a annoncé une mise à jour qui sera proposé en février =)