Закрытая переменная доступна через класс

Я работаю над классом PHP, который выглядит следующим образом:

<?php
class xyz{
public $car1;
public $car2;
private $owner;

public function __construct ($type){
$this->car1 = $type;
$this->owner = "John";
return $this->owner();
}
private function owner(){
return "Owner of ".$this->car1." is ".$this->owner;
}

Теперь, вот проблема, когда я вызываю этот класс через другой код, я могу легко получить доступ к закрытой переменной, и функция возврата не работает правильно.

Вот образец:

  <?php
$car = new xyz("Sedan");
echo $car; //Expected result: Owner of Sedan is John.
?>

Если я напечатаю $ car, вот что я получу

 Object ( [car1] => Sedan [car2] => "" [owner:xyz:private] => John )

Как я могу достичь желаемых результатов и как защитить личную переменную?

Все помощь и предложения будут оценены.

Спасибо!

0

Решение

  1. Конструкторы не должны возвращать никаких значений. Предполагается, что конструктор класса инициализирует объект при создании нового экземпляра (например, когда вы пишете $car = new xyz("sedan");так что все, что вы возвращаете, никуда не денется Создайте другие методы в классе, чтобы возвращать значения.
  2. Если вы хотите повторить владельца, сделайте owner метод public и do `echo $ car-> owner ();». Метод возвращает строку, а затем строка отображается. Simple.
  3. Прямой вывод объекта должен привести к ошибке в php 7, возможно, вы используете старую версию php, которая возвращает то, что вы видели, что и происходит, если вы вызываете var_dump($car);, Если вы хотите контролировать, как объект преобразуется в строку, вам необходимо переопределить __toString метод (см. PHP документация).
  4. Свойства и методы видимости ключевые слова работают нормально, если вы пытаетесь использовать $car->owner или же $car->owner() без изменения видимости вы должны увидеть ошибки.
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]