[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Баг php
Invis1ble
Сегодня ночью столкнулся с интересным багом. В php >= 5.3 вроде пофиксили уже, но я сейчас работаю под 5.2.17
Итак, код:
class A {
public static $wtf = true;
}

$class = 'A';

var_dump($class::$wtf); // 12-я строка

ошибка:
Цитата
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in C:\apache\test\www\test.php on line 12

как подсказал гугл, PAAMAYIM NEKUDOTAYIM - двойное двоеточие на иврите

фикс для пыха < 5.3:
class A {
public static $wtf = true;
}

$class = 'A';

eval('$res = ' . $class . '::$wtf;');

var_dump($res);




Спустя 33 минуты, 13 секунд (30.03.2012 - 04:06) Эли4ка написал(а):
Invis1ble
smile.gif

Спустя 7 минут, 14 секунд (30.03.2012 - 04:13) Invis1ble написал(а):
Собственно, к чему я это написал.
Возможно, кто-то предложит вариант получше? Ну и для будущих поколений, которые поймают эту ошибку (правда маловероятно, ибо см. версию)

Спустя 1 минута, 31 секунда (30.03.2012 - 04:15) Эли4ка написал(а):
Invis1ble
возможно..но скорее всего уже все на более новой версии php сидят..

Спустя 51 секунда (30.03.2012 - 04:16) Invis1ble написал(а):
Нет, на многих хостингах 5.3 и в помине еще нет, неговоря уже о 5.4

Спустя 5 минут, 24 секунды (30.03.2012 - 04:21) Nikitian написал(а):
Может всё потому, что надо так? )

class A {
public static $wtf = true;
}

$class = 'A';
$class = get_class_vars($class);
var_dump($class['wtf']);

Когда работаешь с функциями, хотя бы знаешь чего ожидать, а все эти неочевидные обращения как-то не айс и разбираться в таком коде тяжело.
А хак... Не люблю eval()

Спустя 15 минут, 21 секунда (30.03.2012 - 04:36) Invis1ble написал(а):
Nikitian
интересное решение, но не подходит под мою задачу
class A {
public static $init = array();

public static function makeWTF() {
self::$init['wtf'] = true;
}
}


A::makeWTF();

$class = 'A';
$class = get_class_vars($class);
var_dump($class); // array empty


PS. Сам не люблю eval() :)

Спустя 10 минут, 21 секунда (30.03.2012 - 04:47) Nikitian написал(а):

class A {
public static $init = array();

public static function makeWTF() {
self::$init['wtf'] = true;
}
}

A::makeWTF();

print_r(A::$init);
$class = 'A';
$class = get_class_vars($class);
print_r($class);

Output:

Array
(
[wtf] => 1
)
Array
(
[init] => Array
(
[wtf] => 1
)

)

PHP 5.2.6-1+lenny13
Что я сделал не так?

Спустя 6 минут, 53 секунды (30.03.2012 - 04:54) Invis1ble написал(а):
Nikitian
ты прав, я где-то лажанулся, когда тестил... smile.gif
всё работает

Спустя 8 минут, 58 секунд (30.03.2012 - 05:03) Эли4ка написал(а):
а позвольте спросить:
что означает следующая запись:
Цитата
PHP 5.2.6-1+lenny13

то,что здесь используется версия php 5.2.6 а дальше что означает запись?

Спустя 17 минут, 19 секунд (30.03.2012 - 05:20) Invis1ble написал(а):
версия дистрибутива Debian, если не ошибаюсь

Спустя 1 минута, 32 секунды (30.03.2012 - 05:22) Эли4ка написал(а):
Invis1ble
спасибо,ясно.

Спустя 4 часа, 32 минуты, 44 секунды (30.03.2012 - 09:54) VELIK505 написал(а):
Цитата (Эли4ка @ 30.03.2012 - 02:03)
а позвольте спросить:
что означает следующая запись:
Цитата
PHP 5.2.6-1+lenny13

то,что здесь используется версия php 5.2.6 а дальше что означает запись?

lenny это зафиксиный значит (пропатченый) у дебиана такое практикуеться


_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.