Как стать автором
Обновить
14
0
PavelRadaev @PavelRadaev

Пользователь

Отправить сообщение
сервер с 8 гигами памяти сейчас арендуется за 99 евриков, то есть почти нахаляву.
* ", что реализуемо и в 5.2.8 в лоб"
В контексте задачи «автора комментария первого уровня» этот код не имеет смысла, так как приходится реализовывать метод whoAmI в наследниках, что реализуемо и в 5.2.8 в лоб.

class A {
 static function who() {
  echo get_called_class();
 }
}

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.


с последним релиз кандидатом этот код выводит «А», а ведь ты думал что он будет выводить «B»?
да, я не прав.

late static bindings решает проблему описанную автором коммента первого уровня, но не средствами ключевого слова static, что и ввело меня в заблуждение.
У автора комментария первого уровня и у Димы (функция f()) речь шла именно о том, чтобы получить название класса потомка в статическом, _унаследованном_ методе класса родителя.
class A {
  static function who() {
    $className = ''; //тут нужно получить название класса;
    echo $className;
  }
}

class B extends A {
}

B::who()

* This source code was highlighted with Source Code Highlighter.

и задача как раз в том, чтoбы именно приведённый код или аналогичные ему при вызове B::who() выводил «B», а не «A».

Покажи пожалуйста, как ключевое слово static (а не константа, как ты утверждаешь) при вызове статического метода решит поставленную задачу.
поправочка:
2) late static binding не решает эту проблему
Нет, late static binding — это например возможность обратиться к реализации статического метода, которая будет определена в наследниках.

То, о чем Дима говорит в 5.3 не решено какой либо константой типа __CLASS__, а решено функцией get_called_class(), о которой я на самом деле и говорил в своих примерах, но забыл точное название и то, что она только в 5.3 и появилась.
1) ты не прав, self будет доступна
2) я не прав
Согласитесь, это лучше чем backtrace?
$className = get_class();
$obj = new $className();
$obj->yourFavouriteStaticMethod();

попробуйте. :)
$className = get_class();
$obj = new $className();
$obj->yourFavouriteStaticMethod();

Ы?
попробуйте вызвать var_dump(get_class()) в контексте унаследованного статического метода. o_O
а чем get_class() не угодил?
Joka, покажите пожалуйста нам всем решение на PHP, которое на одном сервере будет вам генерировать 10000 страниц в секунду, ну или хотя бы ссылку дайте, ну или хотя бы расскажите о каких запросах вы говорите.
постмодернизм?
Да, красавцы ребята.
Может потому что в overview нет ни слова про Javascript?

С другой стороны ведь написали: «The Developer Toolbar is not compatible with Internet Explorer 8. Please use the developer tools included with Internet Explorer 8. Press F12 or click the 'Developer Tools' entry in the Tools menu to begin using the tool.»

Попробуем завтра встроенные средства.
Единственное, почему мы не разрабатываем под IE изначально, а лишь в последствии добавляем поддержку IE — у нас нет удобных инструментов отладки, таких как FireBug например.

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность