Bonjour,

Voila je rencontre un petit problème avec mon code. J'ai deux erreurs qui sont qu'une Fatal error: Uncaught Error: Call to undefined method APP\Config::get() in C:\MAMP\htdocs\Blog\app\App.php on line 25 et Error: Call to undefined method APP\Config::get() in C:\MAMP\htdocs\Blog\app\App.php on line 25 .

Je fais la série de vidéo sur le POO en php

J'essaye d'avoir https://youtu.be/SDDJmEUaFFM?t=238 . Mais la class Config n'a pas de fonction magique comme get ou alors je la vois pas.

//Config.php
<?php
namespace APP;

class Config{

    protected $setting= [];
    private static $_instance;

    public static function getInstance(){
        if(is_null(self::$_instance)){
            return new Config();
        }
        return self::$_instance;
    }

    public function  __construct(){
        $this->id = uniqid();
        $this->setting=require dirname(__DIR__) . '/config/config.php';
    }

}
//App.php
<?php
namespace APP;
class App{

    public  $title="Mon Blog";
    private $db_instance;
    private static $_instance;

    public static function getInstance(){
        if(is_null(self::$_instance)){
            self::$_instance = new App();
        }
        return self::$_instance;
    }
    public function getTable($name){
        $class_name = '\\APP\\Table\\' . ucfirst($name) . 'Table';
        return new $class_name($this->getDb());

    }
    public  function getDb(){
        $config = Config::getInstance();
        if(is_null($this->db_instance)){
            $this->db_instance = new  Database($config->get('db_name'), $config->get('db_user'), $config->get('db_pass'), $config->get('db_host')) ;
        }
        return $this->db_instance;
    }
}
<?php
//Class utiliser
//index.php
use APP\App;
use APP\Autoloader;
// Adding new constant project root path absolute
define('ROOT_FOLDER', realpath(__DIR__ . '/../'));
require ROOT_FOLDER.'/app/Autoloader.php';
Autoloader::register();
$app = App::getInstance();
$posts = $app->getTable('Posts');
$posts = $app->getTable('Categories');

Je ne comprend pas pourquoi ça ne marche pas.

Ce que j'obtiens

Je devrais avoir a la place une page blanche comme la vidéo. Car pour moi je n'ai pas fait de faute alors pourquoi il cherche la fonction magique de la class Config .
Merci de m'avoir lu je suis nouveaux et encore plus si vous m'aidez a trouvez l'erreur.

4 réponses


Lartak
Réponse acceptée

Bonjour.
C'est normal, dans ta classe Config tu n'as aucune méthode nommé get, alors que tu y fait appel dans ta classe App, il te faut donc créer cette méthode get (dans la classe Config) qui permet de récupérer la valeur d'une clé du tableau stocké dans la propriété setting.
La méthode get dans ce cas n'a rien à voir avec la méthode __get.

ari1008
Auteur

Merci beaucoup Lartak. Grâce a toi j'ai pus résoudre mon problème.

public function get($key){
        if(!isset($this->setting[$key])){
            return null;
        }
        return $this->setting[$key];
    }

Voilà la fonction. Dernière petite question comment je peux différencier une fonction get et get qui est une méthode magique.

Dernière petite question comment je peux différencier une fonction get et get qui est une méthode magique.

La méthode magique c'est __get et non get, tu peux en apprendre plus sur les méthodes magiques ici : PHP: Méthodes magiques - Manual.

ari1008
Auteur

Merci beaucoup