2017-10-17 7 views
0

Je veux inclure la classe Proxy de ./proxy/Proxy.php dans ./index.phpsimplement en PHP espaces de noms

require_once 'proxy/Proxy.php'; 
$proxy = new Proxy(); 

Mais à côté je veux utiliser les espaces de noms, donc je fait:

./proxy/Proxy.php

namespace proxy; 
class Proxy 
{ 
[...] 

et

./index.php

$proxy = new \proxy\Proxy(); 

ou

$proxy = new proxy\Proxy(); 

ou

use proxy\Proxy; 
$proxy = new Proxy(); 

et je reçois toujours: Fatal error: Uncaught Error: Class 'proxy\Proxy' not found in /var/www/proxy/index.php

Qu'est-ce qui ne va pas?

+2

Vous avez toujours besoin d'inclure le fichier de classe .... en utilisant namespacing pour une classe ne fait pas automagiquement les inclusions pour vous, il leur suffit de les espaces de noms –

Répondre

1

Premièrement, si vous voulez utiliser des espaces de noms, rendez-les compatibles avec le chargeur automatique PSR-4! Vérifiez ce lien:

http://www.php-fig.org/psr/psr-4/

En d'autres termes, je vous demande de changer votre espace de noms Proxy avec un capital.

Deuxièmement, pour activer le chargement automatique, vous devez enregistrer un autochargeur. Vous pouvez le faire vous-même en vérifiant cela sur http://php.net/manual/en/function.spl-autoload-register.php, ou, le meilleur moyen est d'installer Composer (https://getcomposer.org/). En utilisant Composer puis, si vous ne l'utilisez pas actuellement, exécutez composer init à partir de votre racine de site, ce qui générera un composer.json.

A l'intérieur du JSON, ajoutez cette entrée:

"autoload": { 
    "psr-4": { 
     "Proxy": "src/" 
    }, 
}, 

qui prend toutes les classes commençant par namespace Proxy aller dans le répertoire src.

Depuis que vous avez apporté des modifications à la configuration de chargement automatique, exécutez composer dumpautoload et générer des feuilles de classage nouvelles.

Enfin, dans vos scripts, require_once 'vendor/autoload.php et vous n'aurez plus jamais besoin d'une classe require!

require_once 'vendor/autoload.php'; 

use Proxy\Proxy; 

$proxy = new Proxy(); 

La convention est basée sur le chemin du fichier et le nom, donc src/Proxy.php est namepace Proxy, class Proxy. src/Something/Else.php serait namespace Proxy\Something avec class Else.

Amusez-vous! :-D

1

Effectuez les opérations suivantes dans votre index.php:

include 'proxy/Proxy.php'; 
use proxy\Proxy; 

$proxy = new Proxy(); 

Ce fichier avec la classe doit être inclus afin d'être accessible. Il ne suffit pas d'appeler son espace de nom.

0

^^ Le commentaire de mega6382I devrait faire l'affaire.

Mais je voulais peut-être vous aider davantage dans votre développement, je suggère que vous vouliez charger automatiquement les fichiers quand vous en avez besoin? Vous pouvez utiliser PHP son propre autochargeur: "spl_autoload_register!". Je vous recommande également d'utiliser de meilleurs espaces de noms, \ proxy \ Proxy n'a aucun sens ...