Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
$output = '<div class="informer'.($class?' '.$class:'').'">';
* This source code was highlighted with Source Code Highlighter.myNs::MyClass::myMethod();Новый по отношению к чему?Новый разделитель уровней иерархии программных сущностей. Представьте, что «хлебные крошки» на сайте выглядели бы так:
Вот в Виндах обратный слеш — разделитель путей и ничего, много лет, со времён ДОСа все его используют.Несколько отклоняемся от темы, но почему в Windows до сих пор не сделали разделителем фрагментов пути по умолчанию слэши прямые (/), подобно путям в Unix-системах и интернет-адресам — совершенно непостижимо (и это уже при наличии поддержки таких путей в Windows: попробуйте, скажем,
C:/WINDOWS/system32).Главная → Продукция → Булочки
Windows до сих пор не сделали разделителем фрагментов пути по умолчанию слэши прямые (/), подобно путям в Unix-системах и интернет-адресам — совершенно непостижимо (и это уже при наличии поддержки таких путей в Windows: попробуйте, скажем, C:/WINDOWS/system32).Да, я знаю, что она там есть. Ответ в том, что делать прямой слеш разделителем по умолчанию нет никакой необходимости. Это просто символ. Ничем не хуже любого другого символа.
В PHP возникнет двойственность, я уже писал об этом.При использовании спецсимвола для обозначения названия пространства имён (вида @myNs) неоднозначности были бы исключены.
делать прямой слеш разделителем по умолчанию нет никакой необходимости.Необходимости нет, есть целесообразность — единообразие. Вводить в одну и ту же адресную строку интернет-адреса с прямым слэшом, а локальные пути — почему-то с обратным — несколько странно. ;-)
Тернарный оператор.?: компактнее, чем отдельный if, и, вероятно, реализован оптимальнее, чем традиционный тернарный оператор, осуществляющий ненужное присваивание переменной самой себе в случае срабатывания true-альтернативы.
Можно использовать без указания true-альтернативы, тогда ей становится само значение.
Однако, в этом я вижу очень мало практического применения.
$a = $a + $b — лучше, чем $a += $b. Или приходит? ;-)class A {
static function who() {
$className = ''; //тут нужно получить название класса;
echo $className;
}
}
class B extends A {
}
B::who()
* This source code was highlighted with Source Code Highlighter.class A {
static public function who() {
echo static::whoAmI();
}
static public function whoAmI() {
return __CLASS__;
}
}
class B extends A {
}
B::who();
* This source code was highlighted with Source Code Highlighter.class A {
static function who() {
echo get_called_class();
}
}
class B extends A {
}
B::who();
* This source code was highlighted with Source Code Highlighter.var_dump('0' == FALSE);
// bool(true)
* This source code was highlighted with Source Code Highlighter.4. Тернарный оператор.
Можно использовать без указания true-альтернативы, тогда ей становится само значение.
…
Однако, в этом я вижу очень мало практического применения.
static function add($tour, $date, $owner, $guest)
{
/*
* Проверка корректноcти параметров.
*/
$ret = self::$system_s->valid($tour, 'tour_id');
$ret = self::$system_s->valid($date, 'date') ? $ret : false;
$ret = self::$system_s->valid($owner, 'command_name') ? $ret : false;
$ret = self::$system_s->valid($guest, 'command_name') ? $ret : false;
if (!$ret)
{
return false;
}
//...
}
* This source code was highlighted with Source Code Highlighter.$ret = self::$system_s->valid($tour, 'tour_id')
&& self::$system_s->valid($date, 'date')
&& self::$system_s->valid($owner, 'command_name')
&& self::$system_s->valid($guest, 'command_name');
* This source code was highlighted with Source Code Highlighter.<?php
abstract class Singleton {
private static $instances = array();
public function __construct() {
$class = get_called_class();
if (array_key_exists($class, self::$instances))
trigger_error("Tried to construct a second instance of class \"$class\"", E_USER_WARNING);
}
public static function getInstance() {
$class = get_called_class();
if (array_key_exists($class, self::$instances) === false)
self::$instances[$class] = new $class();
return self::$instances[$class];
}
}
class A extends Singleton {
}
class B extends Singleton {
}
$a1 = A::getInstance();
$a2 = A::getInstance();
$b1 = B::getInstance();
$b2 = B::getInstance();
if (get_class($a1) == "A" &&
get_class($a2) == "A" &&
get_class($b1) == "B" &&
get_class($b2) == "B" &&
$a1 === $a2 &&
$b1 === $b2)
echo "All good\n";
else
echo "FAIL!\n";
?>
* This source code was highlighted with Source Code Highlighter.можно поменять на плюс (+)
var_dump(1 + 1); # (int) 2 var_dump(1 . 1); # (string) "11"
использую строгую типизацию в пхп (вида $user_id = (int) $_GET['user_id'])Это называется приведением типа. Случись, что php станет строго типизированным, это выражение не скомпилируется, поскольку int и user_id — разные типы данных (у них алгебры разные, скажем, выражение [int] + [int] = [int] законно, а [user_id] + [user_id] не имеет смысла). :)
Насчет зарегистрированных слов — если они Вам мешают и Вы им не пользуетесь, милости просим в те самые файлы с исходниками — все эти слова описаны там и еще легче могут быть оттуда убраныМир возможного вообще чудесен. ;) Тем не менее, в реальности, по мере роста версии php, словарь зарезервированных слов языка только расширяется.
$user_id = user_id::from_string($_GET['user_id']);полагая, что user_id::from_string это конструктор объекта типа [user_id].
$lambda = function() {echo 'Hello World!';};$func = function() use ($var) {echo $var;};$that = $this; $func = function() use ($that) {echo $that->someMethod();};Однако, в этом я вижу очень мало практического применения.
echo @$var['name'] ?: '—';
PHP 5.3: обзор