Перейти к содержимому

Фото
- - - - -

PHP


  • Вы не можете создать новую тему
  • Please log in to reply
14 ответов в этой теме

#1 Cryptoboy

Cryptoboy
  • Пользователь
  • 280 сообщений

Отправлено 09 Ноябрь 2008 - 13:38

Почему это не работает? код приблизительно такой .. ( убрал лишние части )
Мне кажется, это должно работать.. но зная насколько в ПХП все не логично.. может там как то через жопу надо делать ? :)


class A {
public function gg() {
echo "blablabla";
}
}

<? session_start();
if (isset($_SESSION['hui'])) {
$a = $_SESSION['hui'];
$a->gg(); // ГОВОРИТ что метод gg() не определен
} else {
$a = new A();
$_SESSION['hui'] = $a;
}

  • 0

#2 DTprog

DTprog
  • Пользователь
  • 80 сообщений
  • Откуда:Tartu

Отправлено 09 Ноябрь 2008 - 14:05

Ты вызываешь метод класса до инициализации самого класса. Теперь должно работать...

class A {
public function gg() {
echo "blablabla";
}
}

session_start();

if (isset($_SESSION['hui'])) {
$a = $_SESSION['hui'];
$a = new A();
$a->gg(); 
} 
else {
$_SESSION['hui'] = $a;
}

Сообщение изменено: DTprog (09 Ноябрь 2008 - 14:06 )

  • 0
Когда усилия науки прольют везде елей и мед,
По любопытству иль со скуки все это кто-нибудь взорвет.

#3 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 09 Ноябрь 2008 - 14:09

зная насколько в ПХП все не логично

PHP, как раз, логичный язык =] Мануал просто пыхтеть надо :)
  • 0

#4 Cryptoboy

Cryptoboy
  • Пользователь
  • 280 сообщений

Отправлено 09 Ноябрь 2008 - 14:15

DTprog, нене, мне надо чтоб из сессии взялся сохраненный класс.. а не новый создавать

PHP, как раз, логичный язык =] Мануал просто пыхтеть надо :)


Меня разрдажает что нет строгой типизации.. :(
  • 0

#5 Cryptoboy

Cryptoboy
  • Пользователь
  • 280 сообщений

Отправлено 09 Ноябрь 2008 - 15:04

Проблему решил ... оказалось что просто так в сессии нельзя сохранять объекты .. нужно их сначала сериализовать ... :

$_SESSION['hui'] = serialize($a);

....

$a = unserialize($_SESSION['hui']);
  • 0

#6 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 09 Ноябрь 2008 - 15:42

Меня разрдажает что нет строгой типизации.. :(

тоесть ? :/
  • 0

#7 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 09 Ноябрь 2008 - 17:03

тоесть ? :/

int i = 10;

  • 0

#8 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 09 Ноябрь 2008 - 17:07

Setor, (int)$i = 10; :) Что мешает ?
  • 0

#9 Cryptoboy

Cryptoboy
  • Пользователь
  • 280 сообщений

Отправлено 09 Ноябрь 2008 - 17:09

А потом я смогу сделать
$i = "aaa";
и интрепретатор даже не ругнется..
  • 0

#10 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 09 Ноябрь 2008 - 17:09

Проблему решил ... оказалось что просто так в сессии нельзя сохранять объекты .. нужно их сначала сериализовать ... :

$_SESSION['hui'] = serialize($a);

....

$a = unserialize($_SESSION['hui']);

Да что ты говоришь! Объекты в сессии сериализуются автоматически! Тот код что ты привёл в первом посте отлично работает.
  • 0

#11 Cryptoboy

Cryptoboy
  • Пользователь
  • 280 сообщений

Отправлено 09 Ноябрь 2008 - 17:13

Ну хз .. только что попробовал убрать сериализацию - ошибка
  • 0

#12 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 09 Ноябрь 2008 - 17:26

Ты сессию почисти, у тебя там наверное сериализованные данные хранятся с предыдущих попыток, а ты пытаешься их использовать как объект.
  • 0

#13 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 09 Ноябрь 2008 - 17:26

Slаm, Если перед каждой $i приписывать тип, в данном случае, (int), то никаких 'aaa' установить ты не сможешь :) Да и зачем тебе это надо ?
  • 0

#14 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 09 Ноябрь 2008 - 17:31

Slаm, Если перед каждой $i приписывать тип, в данном случае, (int), то никаких 'aaa' установить ты не сможешь :) Да и зачем тебе это надо ?

Это такие вещи, о которых обычно не спорят. В больших приложениях, когда используется большая куча объектов иногда передаются не те объекты, которые должны (по ошибке программиста или системы). В PHP5 например, в методах можно указывать тип принимаемой переменной. Я сам несколько раз натыкался на такие грабли, и возникала ошибка - за что я ей был очень благодарен, т.к. отловить такую багу сложно.
  • 0

#15 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 09 Ноябрь 2008 - 17:56

Setor, Это стиль написания кода, а это личное, кому как удобно и понятно :)
  • 0