#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) {
)