Bonjour,

Je suis en train de suivre les tutoriel de grafikart mais j'ai un problème à un moment dans la vidéo namespace.
Quand je lui dit d'aller chercher le form.php pour l'initialiser il me dit que la classe form est introuvable alors que quand je fait un var_dump j'ai bien form intialiser, donc j'ai regarder encore et encore la vidéo pour comprendre et toujours rien.

Ce que je fais

Fichier Autoloader.php


class Autoloader
{
  static function register()
  {
    spl_autoload_register(array(__CLASS__ , 'autoload')); //__CLASS__ appelle nom de la classe courante
  }

  static function autoload($Classe)
  {
    $Classe = str_replace('Tutoriel\\', '', $Classe); // TUtoriel -> nom de la classe

    $Classe = str_replace('\\', '/', $Classe);
    var_dump($Classe);

    require 'Classe/HTML/'. $Classe .".php";

  }
}

 ?>

fichier Form.php

namespace Tutoriel\HTML;

  class Form
  {
    private $data;
    public $surround = 'p';
    public $srow = 'br /';

    public function __construct($data = array())
    {
      $this ->data = $data;

    }

    private function surround($html) //permet de creer un tag exemple <p></p>
    {
    return "<{$this->surround}>$html<{$this->surround}>";
    }

    private function getValue($index) //methode pour recuperer valeur tapé
    {
      if(isset($this->data[$index]))
      {
        return $this->data[$index];
      }
      else
      {
        return null;
      }
    }

    public function input($name) //methode  input
    {
      return $this->surround('<input type="text" name="'.$name.'" value="'.$this->getValue($name).'"/>');
    }

    public function submit() //methode submit
    {
      return $this->surround('<button type="submit">Envoyer</button>');
    }
    public function reset()//methode reset
    {
      return $this ->surround('<button type="reset">Reinitialiser</button>');
    }
    public function br() //méthode br : <br />
    {
      return "<{$this->srow}>";
    }
  }
 ?>

fichier index.php

<?php
require('Classe/Autoloader.php');

Autoloader::register();

$form = new Form(array(
  'username' => 'fff'
));

?>

<form method="post" action="#">
<?php
echo $form ->input('username');
echo $form ->input('password');
echo $form->submit() . $form -> reset();
echo $form->br();
?>

</form>

Ce que je veux

le formulaire

Ce que j'obtiens

Fatal error: Class 'Form' not found in C:\wamp64\www\POO_php_grafikart\autoloading\index.php on line 7

2 réponses


betaWeb
Réponse acceptée

Salut,

C'est normal, tu n'importe pas ta classe depuis le bon namespace.

$form = new \Tutoriel\HTML\Form([
  'username' => 'fff'
]);

Je pense que tu devrais regarder la formation PHP POO (https://www.grafikart.fr/formations/programmation-objet-php).
Es-tu sûr de bien avoir toutes les notions en POO ?

effectivement et oui ne tinquiète pas pour moi