2016-08-04 31 views
0

ich die folgende VerzeichnisstrukturWarum PHP meine Klasse nicht im Namensraum finden

  • MiniCrawler
    • Scripts/
      • htmlCrawler.php
    • Index im Grunde haben. php

This is the index.php

use Scripts\htmlCrawler; 

class Main 
{ 
    public function init() 
    { 
     $htmlCrawler = new htmlCrawler(); 
     $htmlCrawler->sayHello(); 
    } 
} 

$main = new Main(); 
$main->init(); 

And this is the /Scripts/htmlCrawler.php

namespace Scripts; 

    class htmlCrawler 
    { 
     public function sayHello() 
     { 
      return 'sfs'; 
     } 
    } 

Der Code führt den folgenden Fehler

Fatal error: Class 'Scripts\htmlCrawler' not found in /mnt/htdocs/Spielwiese/MiniCrawler/index.php on line 9

+0

Haben Sie '/ Scripts/htmlCrawler.php' irgendwo in Ihrer' index.php' Datei? – AntoineB

+0

@AntoineB Es funktioniert, wenn ich include ('Scripts/htmlCrawler.php'); aber wäre das nicht der Zweck der Verwendung Aussage besiegen ?, zum Beispiel Symfony-Klassen nur die Verwendung ‚Verwendung‘ Anweisung ohne einschließlich der Dateien in eachother – user3531149

+0

ich alles in meiner Antwort detailliert :) – AntoineB

Antwort

2

Sie haben vergessen, die Datei /Scripts/htmlCrawler.php in Ihrer index.php Datei aufzunehmen.

require_once "Scripts/htmlCrawler.php"; 

use Scripts\htmlCrawler; 

class Main 
{ 
    public function init() 
    { 
     $htmlCrawler = new htmlCrawler(); 
     $htmlCrawler->sayHello(); 
    } 
} 

$main = new Main(); 
$main->init(); 

Ihre Indexdatei die Definition der htmlCrawler Datei nicht finden können, wenn Sie nicht die Datei Definition dieser Klasse bieten, und die Verwendung von Namensräumen nicht automatisch die erforderlichen Klassen umfassen.

Der Grund, warum Frameworks erfordern Sie nicht manuell die Datei enthalten und Sie können einfach die use Anweisung hinzufügen, weil sie die Aufnahme der erforderlichen Klassen für den Entwickler behandeln. Die meisten Frameworks verwenden composer, um die automatische Aufnahme der Dateien zu behandeln.

Sie können eine ähnliche Funktionalität mit autoloading erhalten.

+2

Könnte auch vorschlagen 'composer' zu nehmen Sorge für das Autoloading – DarkBee