Раздражающая ошибка 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; } } 

Пожалуйста, помогите мне.

end функции имеет следующий end(&$array) прототипа end(&$array) .

Вы можете избежать этого предупреждения, создав переменную и передав ее функции.

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

Из документации:

Следующие вещи могут быть переданы по ссылке:

  • Переменные, т.е. foo ($ a)
  • Новые утверждения, т.е. foo (new foobar ())
  • Ссылки возвращаются из функций, то есть:

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. 
 private function Extention() { return end(explode('.', $this->file)); } 

end () устанавливает массив указателей в последний элемент. Здесь вы предоставляете результат функции, а не переменную.

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