код не печатает мое [имя] [фамилия] [пользователь]
Вы никогда не выводите их из деструктора
public function __destruct()
{
echo "destroyed again";
$this->name; //<---- does nothing
$this->familyName;
$this->userName;
}
Так что я не уверенчто это должно делать.У вас они внизу
print $p1->getName();
print $p1->getFamilyName();
print $p1->getUserName();
Но единственное, что вы получите от метода уничтожения, это
"destroyed again"
И вы увидите, что только если все в формезадавать.Это всегда когда отправляется форма, потому что тип text
всегда отправляется вместе со своей формой.
Что подводит меня к этому, вы должны проверить empty
вместо isset
там
if ('POST' === $_SERVER['REQUEST_METHOD']) { //check if POST
if(empty($_POST["Name"])||empty($_POST["Fam"])||empty($_POST["User"])){
echo "Please fill in the data";
} else {
$p1 = new Person($_POST["Name"],$_POST["Fam"],$_POST["User"]);
print $p1->getName();
print $p1->getFamilyName();
print $p1->getUserName();
print_r($_POST);
}
}
Обратите внимание, что все ложь будет пустым, false
, []
, ''
, 0
, '0'
, null
и т. Д.
Я не знаю, решит ли это все ваши проблемы, но эти вещи могут вызвать поведение, которое вы испытываете.
Еще один более продвинутый способ проверить это так:
if ('POST' === $_SERVER['REQUEST_METHOD']) { //check if POST
$post = array_filter( $_POST, function($item){
return strlen($item); //any thing of a length of 0 is removed
});
if(count($post) != count($_POST)){
foreach(array_diff_key( $_POST, $post) as $missing=>$empty) {
echo "Please fill in $missing\n";
}
}else{
$p1 = new Person($_POST["Name"],$_POST["Fam"],$_POST["User"]);
print $p1->getName();
print $p1->getFamilyName();
print $p1->getUserName();
print_r($_POST);
}
}
Вывод
Please fill in Name
Please fill in Fam
Вы можете проверить это онлайн Здесь
Приветствия!