привет Всем! натолкнулся на проблемку,не могу вызвать переопределенное конструктором свойство из другого метода класса.
class postHunt{
public $width;
public $height;
public $quant;
public $prof;
public $prof_type;
public $cam;
public $price;
public $pub_type;
public $tglass;
public $glass_type;
public $spacer_type;
public $spacer;
public $argon;
public $checkbox;
public $cgl;
public function __construct($type){
if(isset($_POST['calculate'])){
$type = clearData($type,"i");
$this -> pub_type = $type;
switch($type){
case 1: $this -> f1stv_1(); break;
case 2: $this -> f1stv_2(); break;
case 3: $this -> f1stv_3(); break;
case 4: $this -> f1stv_4(); break;
case 5: $this -> f1stv_5(); break;
case 6: $this -> f1stv_6(); break;
}
}
if(isset($_POST['reset'])){
$type = clearData($type,"i");
redJs($link="windows.php?type=$type");
exit;
}
if(isset($_POST['close'])){
redJs($link="windows.php");
exit;
}
if(isset($_POST['width'])) $this -> width = clearData($_POST['width'],"i");
else $this -> width = '';
if(isset($_POST['height'])) $this -> height = clearData($_POST['height'],"i");
else $this -> height = '';
if(isset($_POST['quant'])) $this -> quant = clearData($_POST['quant'],"i");
else $this -> quant = 1;
if(isset($_POST['prof'])) $this -> prof = clearData($_POST['prof'],"i");
else $this -> prof = 2;
if($this -> prof==1) $this -> prof_type = 'Proplex Premium';
else{
$this -> prof_type = 'Proplex Optima';
$this -> prof = 2;
}
if(isset($_POST['glass'])) $this -> cam = clearData($_POST['glass'],"i");
else $this -> cam = 1;
if(isset($_POST['t'])) $this -> t = clearData($_POST['t'],"i");
if(isset($_POST['spacer'])) $this -> spacer = clearData($_POST['spacer'],"i");
else $this -> spacer = 1;
switch($this -> spacer){
case 1: $this -> spacer_type = 'Аллюминевая';break;
case 2: $this -> spacer_type = 'Super Spacer';break;
default:$this -> spacer_type = 'Аллюминевая';break;
}
if(isset($_POST['tglass'])) $this -> tglass = clearData($_POST['tglass'],"i");
else $this -> tglass = 1;
switch($this -> tglass){
case 1: $this -> glass_type = 'Cтандартное'; $this -> cgl = 160; break;
case 2: $this -> glass_type = 'Энергосберегающее'; $this -> cgl =
260; break;
case 3: $this -> glass_type = 'Солнцезащитное'; $this -> cgl = 450; break;
default:$this -> glass_type = 'Cтандартное'; $this -> cgl = 160;
}
if(isset($_POST['argon'])) {
$this -> argon = clearData($_POST['argon'],"i");
if($this -> argon == 1) $this -> checkbox = 'checked';
else $this -> checkbox = '';
}
}
public function f1stv_1(){
$type = $this -> pub_type;
$this -> width = clearData($_POST['width'],"i");
$w = ($this -> width)/1000;
$this -> height = clearData($_POST['height'],"i");
$h = ($this -> height)/1000;
$this -> quant = clearData($_POST['quant'],"i");
$q = $this -> quant;
$x = $this -> cgl;
echo " из метода ".$this->cgl;
if(!empty($w) and !empty($h) and !empty($q)){
$cpvh = 81*(2*($w+0.006)+2*($h+0.006));
[b]$cglass = $x*(($w-0.096)*($h-0.096));[/b]
$cshtapik ='' ;
$cram = '';
$carmir = '';
$cfull = $x;
$this -> price = $cfull;
}else{
messJs('Внимание! Некорректное значение в поле, заполните все поля.',"./windows.php?type=$type");
exit;
}
}
}
Вот я выделил переменную $x которую метод не видит почему-то...
при обращении из другого скрипта извне класса, по примеру:
$posts = new postHunt($type);
echo $posts->cgl;
и вызов из конструктора тоже видит:
echo $this -> cgl;
а вот из метода f1stv_1() не видит..
Спустя 1 час, 22 минуты, 6 секунд (1.02.2012 - 14:32) neadekvat написал(а):
Цитата (Kumirska @ 1.02.2012 - 14:10) |
а вот из метода f1stv_1() не видит.. |
Видит.
А вот чего не вижу я - так это обращения к методу f1stv_1().
Спустя 1 минута, 40 секунд (1.02.2012 - 14:33) alexbel2404 написал(а):
запустил твой класс, у меня все работает)
$obj = new postHunt(1);
$obj->f1stv_1();
строка
echo " из метода ".$x;
вывела
Спустя 1 минута, 28 секунд (1.02.2012 - 14:35) alexbel2404 написал(а):
Цитата (neadekvat @ 1.02.2012 - 15:32) |
Цитата (Kumirska @ 1.02.2012 - 14:10) | а вот из метода f1stv_1() не видит.. |
Видит. А вот чего не вижу я - так это обращения к методу f1stv_1().
|
в конструкторе вызывается, если $type = 1;
Спустя 11 минут, 13 секунд (1.02.2012 - 14:46) Kumirska написал(а):
не могу понять что такое, в методе комментирую переменные,но они определены ведь в конструкторе,и посты приходят все и они не пусты,но если закомментить все
clearData($_POST.. то срабатывает
else то есть выводит сообщение что не все поля заполнены
public function F1stv1(){
$type = $this -> pub_type;
$this -> width = clearData($_POST['width'],"i");
$w = ($this -> width)/1000;
$this -> height = clearData($_POST['height'],"i");
$h = ($this -> height)/1000;
$this -> quant = clearData($_POST['quant'],"i");
$q = $this -> quant;
$x = $this -> cgl;
echo " из метода ".$this->cgl." ТИП № ".$this -> glass_type;
if(!empty($w) and !empty($h) and !empty($q)){
$cpvh = 81*(2*($w+0.006)+2*($h+0.006));
$cshtapik ='' ;
$cram = '';
$carmir = '';
$cfull = $x;
$this -> price = $cfull;
}else{
messJs('Внимание! Некорректное значение в поле, заполните
все поля.',"./windows.php?type=$type");
exit;
}
}
Из всех переменных внутри
public function F1stv1() видит только
echo "ссылка ".$type; Спустя 17 часов, 26 минут, 8 секунд (2.02.2012 - 08:12) Kumirska написал(а):
Ура товарищи! я разобрался-таки! Дело в том что $type была определена в самом начале конструктора,затем следовал свитч через переменную $type,где запускались все расчеты, но переменные пришедшие методом пост были присвоены свойсвам класса только после выполнения функции
f1stv_1(), cooтветственно они и были пусты в функции и меня все время редиректило назад на заполнение!
$this -> pub_type = $type;
switch($type){
case 1: $this -> f1stv_1(); break;
case 2: $this -> f1stv_2(); break;
case 3: $this -> f1stv_3(); break;
case 4: $this -> f1stv_4(); break;
case 5: $this -> f1stv_5(); break;
case 6: $this -> f1stv_6(); break;
}
Всем спасибо за внимание! Тема закрыта!
никому не дано знать абсолютной истины, ибо понятия, которыми мы оперируем, сами по себе относительны