Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
public function test(Itest $test){}
class bar {
function foo(int $a) {
}
function foo(array $a) {
}
}
class MyClass
{
public function __construct()
{
$query = $this->registry
->get_service('InputQueryBuilder')
->get_query_object();
$this->some_method($query->get('id', 'int')); // первый параметр - ключ, второй - ожидаемый тип
}
protected function some_method(int $id)
{
// тело метода
}
}use /Project/Validator/ValidatorI as V,
/Project/Validator/Exceptions/ValidatorException;
// класс обладает знаниями о том, как выполняется определенное действие,
// запрошенное пользователем, и о том, какие типы и граничные значения
// имеют входящие параметры
class SomeActionController
{
protected function validate_query(array $params)
{
try
{
// $params['id'] передается по ссылке
// и после валидации имеет заданный тип
$this->validator->validate($params['id'], V::INT|V::UNSIGNED|V::NOT_NULL);
}
catch (ValidatorException $e)
{
// обработка ошибки
}
$this->some_method($params['id']);
}
}$object->$method($id); то проблемы могут возникнуть, и IDE мало поможет, только тесты.$obj->method([
'foo'=>'bar',
'bar'=>'foo'
]);биндить юзера (сессию) к одной ноде например :)
true или false. Всё остальное (типа вытаскивания числового id из таблицы users по текстовым логину и паролю и сохранения его в сессии) — это оптимизации как UI (чтобы не заставлять пользователя при каждом запросе вводить логин и пароль), так и ресурсов (чтобы не дергать при каждом запросе базу, проверяя логин и пароль, и не связывать таблицу users с другими по текстовому логину) с безопасностью (чтоб не хранить пароль, пускай и хэшированный с солью, в куках или той же сессии). Вы же называете это всё одним процессом — аутентифкацией, хотя тут заключено ещё минимум 3 процесса оптимизации: UI и безопасности — пользователь передаёт логин и пароль только один раз, а дальше только идентификатор сессии посылает, ресурсов и безопасности — кэширование результатов запроса на соответствие логина и пароля (htcehcs), и, как следствие, ненужность хранения пароля в сессии (безопасность), и ещё раз ресурсов и безопасности — связь таблицы users осуществляется с другими по суррогатному числовому идентификатору, а не по натуральному текстовому (логину), связь по такому id быстрее (ресурсы) и отсутсвие необходимости хранить натуральный текстовый в сессии безопаснее немного. Плюс микрооптимизация в виде проверки результата аутентификации через isset($_SESSION['user_id']), а не $_SESSION['user_is_authenticated'].Результат аутентификации и есть идентификатор пользователя — разве я это сказал? Или это я додумал?SELECT id FROM users WHERE login='$login' AND password='$password', но её результатом является не id, а то что вообще нашлась запись где login='$login' AND password='$password'.Данная информация не особенно полезна для запроса, непосредственно закачивающего файл, однако, в течение данной загрузки приложение может посылать POST-запросы на отдельную страницу (например, с помощью XHR) для проверки статуса.Опции session.upload_progress.freq и session.upload_progress.min_freq контролируют частоту обновления информации о прогрессе загрузки. При разумных значениях этих двух настроек, накладные расходы данной функции практически неощутимы.session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"session_save_handler(...);
session_start();trait B {
public function bar() {
return $this->foo() . ' bar';
}
}
$ php -r 'class A{static public $foo_bar = "ok";} $foo = "foo"; $bar = "bar"; echo A::${$foo . "_" . $bar};'Как часто нам нужно дернуть нулевой индекс у метода, который возвращает массив?
function test()
{
return array('first', 'second');
}
print "\n";
print_r(reset(test()));
print "\n";imenem@localhost:~
$ test
PHP Strict standards: Only variables should be passed by reference in /var/www/bank-soft.local/www/test.php on line 21
PHP Stack trace:
PHP 1. {main}() /var/www/bank-soft.local/www/test.php:0
Strict standards: Only variables should be passed by reference in /var/www/bank-soft.local/www/test.php on line 21
Call Stack:
0.0001 634352 1. {main}() /var/www/bank-soft.local/www/test.php:0
firstfunction test()
{
return array('first', 'second');
}
list($first) = test();
print "\n";
print_r($first);
print "\n";
<ul>
<div>There are no items</div>
</ul>
<div>There are no items</div>
foo()[0]; — вот это круто, foo()(0); — это если функция возвращаетсяzend.multibyte boolean
Разрешает парсинг исходных файлов в многобайтных кодировках.
detect_unicode boolean
Определяет, нужно ли проверять BOM (Byte Order Mark, метка порядка байт) и корректность многобайтных символов в файле. Эта проверка производится до вызова __halt_compiler(). Доступна только в режиме Zend Multibyte.logSomething($_SERVER["HTTP_REFERER"], ..., ...);logSomething(isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : "", ..., ...);logSomething(@$_SERVER["HTTP_REFERER"], ..., ...);logSomething($_SERVER["HTTP_REFERER"] ?: "", ..., ...);PHP Notice: Undefined index: HTTP_REFERER in - on line 2$_SERVER["HTTP_REFERER"] ?: "" эквивалент $_SERVER["HTTP_REFERER"] ? $_SERVER["HTTP_REFERER"] : "", но не isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : "" Интересно появится ли когда-нибудь.Scalar type hints в PHP 5.4 не будет. Не смотря на это заявление, в SVN тэге 5.4 scalar type hints нет :(
The agreement to include apc in 5.4 is an old one, unfortunately the action of doing was just missed.
Что нового в PHP 5.4