Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2009, 01:13   #11
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Никакой сложности в том что вызов в конструкторе - нет, вот пример который позволит Вам не отойти от обьектной модели и использовать set_error_handler.
Важно чтобы ф-я error_f была обьявлена глобально а не как метод класса.
PHP код:
function error_f ($num,$str,$file,$line){
  
$GLOBALS['my_error']=$str;             

class 
Tprimer{
  public 
$error=''
  public function 
__construct(){ 
    
$GLOBALS['my_error']=null;
    
set_error_handler('error_f');  
    
$sqlcon=mysql_connect($db_host,$db_userlog,$db_userpas);
    
restore_error_handler(); 
    if(
$GLOBALS['my_error']<>null$this->error=$GLOBALS['my_error'];
    
//$this->error содержит ошибку и её можно отправлять как Вам нужно
  
}  
}

$var= new Tprimer
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 07.02.2009, 15:08   #12
crazy horse
ios developer
Старожил
 
Аватар для crazy horse
 
Регистрация: 16.11.2007
Сообщений: 2,885
По умолчанию

Цитата:
Важно чтобы ф-я error_f была обьявлена глобально а не как метод класса.
я не могу ничего объявить или описать вне класса. такова специфика.
2SkyM@n
Цитата:
А что говорит? Или молчит?
в моем посте N3 написано.
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!
crazy horse вне форума Ответить с цитированием
Старый 07.02.2009, 21:16   #13
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Цитата:
я не могу ничего объявить или описать вне класса. такова специфика.
Если Вы решили заняться обьектно-ориентированным программированием, то без глубоко понимания этой области Вам не обойтись. Но все мы тут чтобы обмениваться опытом и помогать друг другу.
Чтобы метод класса был доступен без создания обьекта его надо обьявить статически (своего рода глобально), для этого его обьявить как static и вызывать так класс::метод.
Пример
PHP код:
class Tprimer{
  public 
$error=''
  static function 
error_f ($num,$str,$file,$line){
    
$GLOBALS['my_error']=$str;             
  } 
  public function 
__construct(){ 
    
$GLOBALS['my_error']=null;
    
set_error_handler('Tprimer::error_f');  
    
$sqlcon=mysql_connect($db_host,$db_userlog,$db_userpas);
    
restore_error_handler(); 
    if(
$GLOBALS['my_error']<>null$this->error=$GLOBALS['my_error'];
    
//$this->error содержит ошибку и её можно отправлять как Вам нужно
  
}  
}

$var= new Tprimer
для проверки работает ли у Вас вообще set_error_handler скопируйте это в отдельный скрипт и проверьте, ошибки set_error_handler быть не должно я проверял, если есть значит надо копаться в настройках php
Стрелок-охотник

Последний раз редактировалось mv28jam; 07.02.2009 в 21:22.
mv28jam вне форума Ответить с цитированием
Старый 09.02.2009, 07:55   #14
crazy horse
ios developer
Старожил
 
Аватар для crazy horse
 
Регистрация: 16.11.2007
Сообщений: 2,885
По умолчанию

Цитата:
Если Вы решили заняться обьектно-ориентированным программированием, то без глубоко понимания этой области Вам не обойтись. Но все мы тут чтобы обмениваться опытом и помогать друг другу.
Спасибо огромное за консультацию
Под "объявить вне класса" подразумевалось именно вне класса, а не вне объекта. Вообще. Тут имело место взаимонедопонимание. Что такое статический метод, поверьте, мне знакомо. ))
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!

Последний раз редактировалось crazy horse; 09.02.2009 в 09:30.
crazy horse вне форума Ответить с цитированием
Старый 10.02.2009, 02:48   #15
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Цитата:
Тут имело место взаимонедопонимание.
Это точно, я до сих пор в таком состоянии...

Кстати было бы очень красиво в этой ситуации сделать наследование от Exception и создать обработчик try cath, напишу и внедрю это у себя.
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 10.02.2009, 13:52   #16
crazy horse
ios developer
Старожил
 
Аватар для crazy horse
 
Регистрация: 16.11.2007
Сообщений: 2,885
По умолчанию

немного оффа
Цитата:
Это точно, я до сих пор в таком состоянии...
ммм... я, видимо, плохо объяснил... Сейчас попробую исправить.
Значится так - для меня объявить вне класса означает, к примеру, описать функцию/переменную/etc. где -нибудь на хтмл -странице именно вне определения класса вообще. А поскольку у меня существовать отдельно от классов ничего ввиду специфики обмена данными не может - даже статика рулит только внутри самого пыха: функции занимающиеся приемом/передачей данных должны принадлежать объектам. Вот тут мы с вами друг-друга и не поняли)) До меня просто не дошло, что вы имеете ввиду статически объявленную функцию - возвращаясь назад, скажу - что и это пробовал - где-то раньше в моих постах это есть.

Цитата:
Кстати было бы очень красиво в этой ситуации сделать наследование от Exception и создать обработчик try cath, напишу и внедрю это у себя.
Вот это я в конечном итоге и хотел сделать. Но связка flex+amfphp упирается при одном виде кастомного хендлера... Видимо придется брать снифер и выяснять - кто из них скотина...
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!
crazy horse вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Fatal error: Call to undefined function mysql_connect() Air Помощь студентам 1 17.01.2009 12:41
Обработчик исключений Delphi xxxPascalxxx Помощь студентам 5 30.11.2008 06:37
Обработка исключений ввода в TMaskedEdit joker Общие вопросы Delphi 8 11.06.2008 15:02
обновление в блоге - Обработка исключений в Delphi Pblog Обсуждение статей 0 11.09.2007 18:40