2016-06-01 10 views
0

I'vに含まれていない:私が行うときPHPクラスが見つかりましたが、それはフォルダ内だと、私はこの方法でファイルを含める場合、それはまた...単数proble

<?php  
    session_start(); 
    session_regenerate_id(); 
    foreach (glob("../class/*.php") as $filename) 
    { 
     echo "$filename\n"; 
     include $filename; 
    } 
    foreach (glob("../utilities/*.php") as $filename) { 
     echo "$filename\n"; 
     include $filename; 
    } 

class ECommerce { 
    private $checker; 
    private $errorManager; 

    /** 
    * ECommerce constructor. 
    */ 
    function __construct() { 
     $this->checker = new Checker(); 
     $this->errorManager = new ErrorManager(); 
    } 

ウェブサイトが機能しないとし、

$ecommerce = new ECommerce(); 

それはI'vはこれをしようとすると思ったときに

Class 'ErrorManager' not found in path

は、私は、何を思ったことを言う:

<?php  
    session_start(); 
    session_regenerate_id(); 
    include "../class/Checker.php"; 
    include "../class/User.php"; 
    include "../utilities/ErrorManager.php"; 

class ECommerce { 
    private $checker; 
    private $errorManager; 

    /** 
    * ECommerce constructor. 
    */ 
    function __construct() { 
     $this->checker = new Checker(); 
     $this->errorManager = new ErrorManager(); 
    } 

このように、動作して何がしなければならないのですか?
私の中には、「なぜ」という言葉が根を作っていて、私は(本当に)眠ることができません。
ErrorManager以外のすべてのクラスで最初の方法が機能するのはなぜですか?
ありがとうございました!

ここで、のErrorManagerクラスコードがある(それはチェッカークラスのような空白の構造を持っている)

<?php 
class ErrorManager 
{ 
function __construct() { 
} 

function getErrorUserNameNotValid() { 
    return "Nome inserito non valido"; 
} 

function getErrorUserSurnameNotValid() { 
    return "Cognome inserito non valido"; 
} 

function getErrorUserEmailAlreadyExists() { 
    return "Email inserita non valida!"; 
} 

function getErrorUserEmailNotValid() { 
    return "Email inserita non valida!"; 
} 

function getErrorUserPasswordNotValid() { 
    return "Password inserita non valida! Inserisci una password che sia lunga tra i 6 e i 50 caratteri!"; 
} 

function getErrorUserAddressNotValid() { 
    return "Indirizzo inserito non valido!"; 
} 

function getErrorUserPhoneNumberNotValid() { 
    return "Numero telefonico inserito non valido! Inserisci solo numeri, senza trattini o caratteri speciali!"; 
} 
} 

私は、フォルダのスクリーンショットを含め、あまりにも
enter image description here

私は、今、これをしようとしていますオートローダー:
これは、eコマースのクラスである:

spl_autoload_register('MyAutoloader::ClassLoader'); 
spl_autoload_register('MyAutoloader::LibraryLoader'); 

そしてこれはMyAutoloaderClassであるが

class MyAutoloader 
{ 
public static function ClassLoader($className) 
{ 
    $path = "../class/"; 
    include $path.$className.'.php'; 
} 


public static function LibraryLoader($className) 
{ 

    $path = __DIR__."/"; 
    include $path.$className.'.php'; 
} 

}

それは、含まれていない相対パスに

include(../class/ErrorManager.php): failed to open stream: No such file or directory in

+0

ファイルからErrorManagerコードを投稿することもできますか。 – Brett

+0

@Brettもちろん、来ている! – ProtoTyPus

+0

../utilities/ErrorManager.phpあなたが正しいパスであることを確認してください。ユーティリティフォルダはclassesフォルダと同じフォルダにありますか? – Brett

答えて

2

includeと呼ばれるPHPスクリプトのパスに基づいてファイルを検索しますと言っていますあなたが呼び出しているPHPファイルはからインクルードします。

eコマースのクラスが異なる場所から使用されている場合でも含めることができるようにするには、あなたの代わりに__DIR__dirname(__FILE__)を使用することができ、古いバージョンのPHPで

include __DIR__ . '/' . $filename; 

を試してみてください。

ErrorManager.phpが読み込まれる前に他の依存関係が存在する可能性があります。 Dispatcher.phpにあります。

次のテストを行うとどうなりますか?

include "../class/Checker.php"; 
include "../class/User.php"; 
include "../utilities/Dispatcher.php"; 
include "../utilities/ErrorManager.php"; 

spl_autoload_registerのようなクラスローディングメカニズムを使用することを検討してください。これは、クラスの依存関係の管理をはるかに簡単にします。

+0

なぜチェッカーがうまく組み込まれたのですか? – ProtoTyPus

+0

編集を見ました。私の問題はforeachループにあり、マニュアルには作品が含まれています! – ProtoTyPus

+0

私はより一般的に編集を終了しました。以前に他のクラスが正常に含まれていた場合は、ErrorManagerがロードされる前に他のクラスに依存している可能性があります。自動ロード/ spl_autoloadメカニズムが存在する可能性もあります。 –

関連する問題