У меня есть этот небольшой скрипт, и я не могу получить эту ошибку:
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); }