2017-01-08 62 views
0

我希望能夠通過鍵入我想要的文件的名稱來包含或要求來自同一父目錄(模塊)的文件包括而不總是寫出require_once('../app/modules/user/user.php')所以我想出了這樣的想法,把它包裝在這樣的功能內:函數中所需的文件中設置的變量仍會導致「注意:未定義的變量」警告

index.php文件。

//index.php 

     function require_file($modules=array()) 
       { 
        foreach($modules as $module) { 
         if (is_dir('../app/modules/' . $module) && file_exists('../app/modules/' . $module . '/' . $module . '.php')) { 
          require_once('../app/modules/' . $module . '/' . $module . '.php'); 
         } else { 
          die('The module <strong>' . $module . '</strong> does not exist in the modules directory'); 
         } 
        } 
       } 

    // and then require my files like this: 

     $modules = array(); 

     $modules[] = 'user'; 

     require_file($modules); 

這是我的目錄是什麼樣子:

1. app 
    - modules 
    - user 
     - user.php 
2. public 
    - index.php 

這是我user.php的文件:

//user.php 

$user = 'My Name'; 

這是問題所在;

  1. 如果在index.php內所用的設定withing的user.php的文件中的變量仍然拋出說明:未定義變量:用戶而不失效的is_dir or the file_exists測試,並且當失敗它輸出一個模按摩說「模塊用戶模塊目錄中不存在」就像它應該。

  2. 當我需要的功能後,右擊文件,以檢查是否該文件已被要求過一次,如下圖所示:

的index.php

function require_file($modules=array()) 
      { 
       foreach($modules as $module) { 
        if (is_dir('../app/modules/' . $module) && file_exists('../app/modules/' . $module . '/' . $module . '.php')) { 
         require_once('../app/modules/' . $module . '/' . $module . '.php'); 
        } else { 
         die('The module <strong>' . $module . '</strong> does not exist in the modules directory'); 
        } 
       } 
      } 

// and then require my files like this: 

    $modules = array(); 

    $modules[] = 'user'; 

    require_file($modules); 

    require_once('../app/modules/user/user.php'); 

它不因爲它顯然已經被要求過一次。

問題是......我做錯了什麼?

+0

因此,您向我們展示了除user.php之外的所有內容。你期望我們猜測那裏有什麼? –

+0

它是在那裏...設置變量$用戶。 – tsommie

+0

您可能想了解一下[PHP自動加載](http://php.net/manual/en/language.oop5.autoload.php),它幾乎完全符合您的要求(在類的上下文中) – Martin

回答

0

變量$user定義在require_file函數範圍內。這是通知的原因。

您需要user.php文件中聲明$user全球變量:

//user.php 
global $user; 
$user = 'My Name'; 

這不是個好主意,但。你應該創建你的模塊作爲類。如果您忘記了該模塊中的變量$user並在另一個模塊中聲明瞭另一個$user變量,它將會發生干擾。

+0

項目不是面向對象的...而且還在學習php。你能告訴我怎麼樣? – tsommie

+0

答案已編輯。如果您不需要加載類,自動加載器無用。 –

+0

@GermanLashevich文件可以很容易地編輯成類,這將是最好的長遠來看。 OP正在學習PHP,這是學習OOP的最佳時機,而不是學習程序後的*。它避免了壞習慣,如'全球' – Martin