2012-10-29 41 views
3

我有這個小腳本量身定做的,我不能讓這個錯誤:惱人的PHP錯誤:「嚴格的標準:只有變量應參考在傳遞」

Strict Standards: Only variables should be passed by reference in C:\xampp\htdocs\includes\class.IncludeFile.php on line 34" off!

這裏是頁:

namespace CustoMS; 

if (!defined('BASE')) 
{ 
    exit; 
} 

class IncludeFile 
{ 
    private $file; 
    private $rule; 

    function __Construct($file) 
    { 
     $this->file = $file; 

     $ext = $this->Extention(); 
     switch ($ext) 
     { 
      case 'js': 
       $this->rule = '<script type="text/javascript" src="'.$this->file.'"></script>'; 
       break; 

      case 'css': 
       $this->rule = '<link type="text/css" rel="stylesheet" href="'.$this->file.'">'; 
       break; 
     } 
    } 

    private function Extention() 
    { 
     return end(explode('.', $this->file)); 
    } 

    function __Tostring() 
    { 
     return $this->rule; 
    } 
} 

請幫幫我。

+4

哪一條是第34行? – Leri

+0

您是否檢查了第34行?你是否檢查過關於第34行的任何文檔?你知道參考文獻的工作原理嗎? – lanzz

+0

[嚴格標準:只有變量應通過引用傳遞]的可能重複(http://stackoverflow.com/questions/2354609/strict-standards-only-variables-should-be-passed-by-reference) –

回答

6

功能end具有以下原型end(&$array)

您可以通過創建變量並將其傳遞給函數來避免此警告。

private function Extention() 
{ 
    $arr = explode('.', $this->file); 
    return end($arr); 
} 

從文檔:

The following things can be passed by reference:

  • Variables, i.e. foo($a)
  • New statements, i.e. foo(new foobar())
  • References returned from functions, i.e.:

explode返回一個數組不數組的引用。

例如:

function foo(&$array){ 
} 

function &bar(){ 
    $myArray = array(); 
    return $myArray; 
} 

function test(){ 
    return array(); 
} 

foo(bar()); //will produce no warning because bar() returns reference to $myArray. 
foo(test()); //will arise the same warning as your example. 
+0

+1用於解釋*爲什麼*'end'拋出錯誤。它期望操作一個引用('&$ array')。 – Charles

1
private function Extention() 
{ 
    return end(explode('.', $this->file)); 
} 

端()設置指針數組的最後一個元素。在這裏,您將函數的結果提供給end而不是變量。

private function Extention() 
{ 
    $array = explode('.', $this->file); 
    return end($array); 
} 
相關問題