167 votes

Comment fonctionne le mot-clé "use" en PHP et puis-je importer des classes avec ce mot-clé ?

J'ai un fichier avec une classe Resp . Le chemin est le suivant :

C:\xampp\htdocs\One\Classes\Resp.php

Et j'ai un index.php dans ce répertoire :

C:\xampp\htdocs\Two\Http\index.php

Dans cette index.php Je veux instancier une classe Resp .

$a = new Resp();

Je sais que je peux utiliser require ou include pour inclure le fichier dans une classe :

require("One\Classes\Resp.php");       // I've set the include_path correctly already ";C:\xampp\htdocs". It works.
$a = new Resp();

Mais je veux importer des classes sans utiliser require ou include . J'essaie de comprendre comment use mots-clés fonctionne. J'ai essayé ces étapes mais rien ne fonctionne :

use One\Classes\Resp;
use xampp\htdocs\One\Classes\Resp;
use htdocs\One\Classes\Resp;
use One\Classes;
use htdocs\One\Classes;    /* nothing works */

$a = new Resp();

Il est écrit :

Fatal error: Class 'One\Classes\Resp' not found in C:\xampp\htdocs\Two\Http\index.php

Comment le mot-clé use travail ? Puis-je l'utiliser pour importer des classes ?

3voto

Eric Draven Points 219

Je suis d'accord avec Green, Symfony a besoin d'espaces de noms, alors pourquoi ne pas les utiliser ?

Voici comment commence un exemple de classe de contrôleur :

espace de noms Acme \DemoBundle\Controller ;

utiliser Symfony \Bundle\FrameworkBundle\Controller\Controller ;

class WelcomeController extends Controller { ... }

3voto

Abdul Mannan Points 653

Les use sert d'alias en PHP et n'importe pas les classes. Cela aide vraiment
1) Lorsque des classes portant le même nom se trouvent dans des espaces de noms différents
2) Évitez d'utiliser un nom de classe très long à plusieurs reprises.

3voto

Thielicious Points 1712

Puis-je l'utiliser pour importer des classes ?

Il n'est pas possible de procéder de la sorte en dehors des exemples ci-dessus. Vous pouvez également utiliser le mot-clé use les classes internes à importer traits comme ceci :

trait Stuff {
    private $baz = 'baz';
    public function bar() {
        return $this->baz;
    }
}

class Cls {
    use Stuff;  // import traits like this
}

$foo = new Cls;
echo $foo->bar(); // spits out 'baz'

3voto

L'utilisation du mot-clé "use" permet de raccourcir les espaces de noms littéraux. Vous pouvez l'utiliser avec ou sans alias. Sans alias, vous devez utiliser la dernière partie de l'espace de noms complet.

<?php
    use foo\bar\lastPart;
    $obj=new lastPart\AnyClass(); //If there's not the line above, a fatal error will be encountered.
?>

2voto

Dotun Peter Points 51

L'espace de noms est utilisé pour définir le chemin d'accès à un fichier spécifique contenant une classe, par exemple

namespace album/className; 

class className{
//enter class properties and methods here
}

Vous pouvez ensuite inclure cette classe spécifique dans un autre fichier php en utilisant le mot-clé "use" comme ceci :

use album/className;

class album extends classname {
//enter class properties and methods
}

NOTE : Ne pas utiliser le chemin vers le fichier contenant la classe à implémenter, les extensions d'utilisation pour instancier un objet mais seulement utiliser l'espace de noms.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X