Задать вопрос
@alexsteadfast
I am noob

Почему не работает конструктор внутри класса?

Хочу выводить результат с использованием конструктора в классе. Вроде делаю как в примерах. Но выходит ошибка "Parse error: in C:\OpenServer123\OpenServer\domains\test\index.php on line 19"
19 строка = $this->OneNumber = $One;
<html>
<head>
<title> Шеснадцатиричные числа </title>
<style>
.st{
outline: 2px solid #000;
}
</style>

<!-- Реализация класса  -->
<? class Construction{
   
   protected   $OneNumber;
   protected   $TwoNumber;
   protected   $ZnakNumber;
   
protected  function __construct($One,$Two,$Znak)
    {
        $this->OneNumber = $One;
        $this->TwoNumber = $Two;
		$this->ZnakNumber = $Znak;
    } 

public function dec($h) {
	$s = array(1=>1, 2=>2, 3=>3, 4=>4, 5=>5, 6=>6, 7=>7, 8=>8, 9=>9,'a'=>10, 'b'=>11, 'c'=>12, 'd'=>13, 'e'=>14, 'f'=>15, 16=>16 );
return $h ? 16*$this->dec(substr($h, 0, -1)) + $s[substr($h, -1)] : 0;}
public function hex($d) { 
    $s = array(1=>1, 2=>2, 3=>3, 4=>4, 5=>5, 6=>6, 7=>7, 8=>8, 9=>9, 10=>'a', 11=>'b',  12=>'c', 13=>'d', 14=>'e', 15=>'f', 16=>16);
return $d ? $this->hex(floor($d/16)).$s[$d%16] : '';}
public function itog($OneNumber, $TwoNumber, $Znak){
//атрибуты
 $One = $this->dec($OneNumber);
 $Two = $this->dec($TwoNumber);
switch($Znak){
  case '-': $result = $One - $Two; break;  
  case '+': $result = $One + $Two; break; 
    };
    
   $finalResult = $this->hex($result);
   return $finalResult; 
}

//Метод вывода информации в браузер
    public function printResult()
    {
		 $result = 0;
        $OneNumber = $this->OneNumber;
        $TwoNumber = $this->TwoNumber;
        $ZnakNumber = $this->ZnakNumber;
		
		if($ZnakNumber=='-'){$result = $OneNumber - $TwoNumber; }
		if($ZnakNumber=='+'){$result = $OneNumber + $TwoNumber; }
	    echo $result;
}
}
// Реализация класса наследника 
class NewConstruction extends Construction{
}
 ?>
</head>
<body bgcolor="gray">
<form method="get" action="#" align="center" style="margin-top:10%;">
 <input type="text" class="st" placeholder="Введите число" name="onenumber">
<select size="1" name="znak"  class="st">
    <option>+</option>
    <option>-</option>
</select>
  
 <input type="text" class="st" placeholder="Введите число" name="twonumber">
   =
 <br>
 Первый вариант вывода строки(Результат):
   <? 
  $Constr = new Construction;
  $Constr->itog($one, $two,$zn);
 ?>
     <br>
Второй вариант вывода строки(Результат):
<? 
  $Constr = new Construction($one,$two,$zn);
  $Constr->printResult();
 ?>
  <br>
Третий вариант вывода(Результат):  
  <? 
  $ConstrNew = new NewConstruction;
  $ConstrNew->itog($one, $two,$zn);
 ?>
 <p><input type="submit" value="Отправить"></p>
</form>
</body>
</html>
  • Вопрос задан
  • 496 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@nightsamurai
  1. Во первых метод конструктора должен быть публичнымpublic function __construct($One,$Two,$Znak)
  2. Во вторых при создании инициализации объекта необходимо передавать аргументы в конструктор
    $Constr = new Construction($one, $two, $zn);

Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@morricone85
Не вижу где определяются переменные: $one, $two, $zn. А, вообще то, код какой-то странный.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы