@supdesign

Почему значения всех свойств класса «затираются» в конструкторе?

Казалось бы данный код должен вывести пустую строку, но выводится цифра 6 — длина переданной строки, которая должна храниться только в $length

class Decoder{ 
    private $inputStr; 
    private $pos; 
    private $out; 
    private $length; 
     
    public function __construct(string $str) {
        $this->inputStr = $str;        
        $this->$pos = 0;
        $this->$out = '';    
        $this->$length = mb_strlen($str);        
    }   
    public function decode(): string {
        return $this->$out;
    }    
}

$cipher = 'chiper';
$decrypted = new Decoder($cipher); 
echo $decrypted->decode();
  • Вопрос задан
  • 102 просмотра
Решения вопроса 2
BoShurik
@BoShurik
Symfony developer
У вас ошибка
class Decoder{ 
    private $inputStr; 
    private $pos; 
    private $out; 
    private $length; 
     
    public function __construct(string $str) {
        $this->inputStr = $str;        
        $this->pos = 0; // Было $this->$pos
        $this->out = ''; // Было $this->$out
        $this->length = mb_strlen($str); // Было $this->$length
    }   
    public function decode(): string {
        return $this->out; // // Было $this->$out
    }    
}


В вашем случае $this->$length = mb_strlen($str); => $this->null = mb_strlen($str);
Таким образом return $this->$out; => return $this->null // 6
Ответ написан
Комментировать
DevMan
@DevMan
включите вывод ошибок. у вас как минимум неверное обращение к свойствам (использование $ в имени).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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