Присвоение свойств классу PHP в конструкторе

#php #class #object #login #constructor

#php #класс #объект #аутентификация #конструктор

Вопрос:

 <?php 
$login1 = new Login("cam", "1234"); echo "<br>";
echo $login1->authenticate($login1->name, $login1->this->password);

class Login{
     public $name;
     public $password;

    function Login($u, $w){
        $this->name = $u;
        $this->$password = $w;
    }

    function authenticate($name, $password){
        $lookupusername = "cam"; 
        $lookuppassword = "1234";
        if($name == $lookupusername amp;amp; $password == $lookuppassword){
            return "Login Success";
            echo "Login Success";
        }   else {
                return "Login Fail";
                echo "Login Fail";
            }
    }
}
?>
  

Я новичок в PHP. Мне интересно, почему конструктор в моем классе login не устанавливает строковые литералы в качестве свойств имени и пароля класса. Я попробовал метод set(), и это тоже не сработало. Я также попытался назначить строковые литералы в качестве переменных и передать их по ссылке. Нет. Где я ошибаюсь?

Комментарии:

1. Это $this->$password неправильно, удалите $ из $password

2. Также это $login1->this->password неправильно, измените его на $login1->password

3. О, похоже на небольшие ошибки опечатки. Спасибо.

Ответ №1:

PHP не создает конструктор так же, как Java (на чем, по-видимому, основан ваш пример). Вы захотите использовать __construct метод PHP, как показано ниже:

 public function __construct($u, $w) {
    $this->name = $u;
    $this->password = $w;
}
  

Кроме того, ваш способ доступа к name атрибуту правильный, но password неверный. Используйте $this->password вместо $this->$password , и $login1->password вместо $login1->this->password

Комментарии:

1. Еще одна вещь: когда я создаю конструктор, работает ли конструктор по умолчанию? Если да, то как мне отключить создание объектов без параметров?

2. @Cameronc56 — Это не работает чисто (вы получите предупреждения); вместо этого вы можете использовать параметры по умолчанию ( function __construct($a = null, $b = null) { )