2016-12-11 1 views
1

Я прихожу из Java-программирования, и я немного знаю, когда речь идет о стиле PHP OOP. В Java Server Faces Я использовал с сеттерами и геттерами, которые я использую для установки значений полей из данных, введенных в форму.PHP OOP с использованием методов setter и getter на элементах формы

Так, например,

Person.java

Class Person{ 
    private String firstname; 
    public setFirstName(String aFirstName){ 
     this.firstname = aFirstName; 
    } 
    public getFirstName(){ 
     return this.firstname; 
    } 
} 

PersonForm.xhtml

Имя:<input type="text" name="firstname" value="#{person.firstname}"/>

#{person.firstname} является что вызывает метод setFirstName(); от класса Лицо

Так что я сделал несколько google, чтобы узнать, как это делается в стиле ООП PHP.

Итак, на PHP Я думал, что это будет выглядеть примерно так.

Person.php

class Person{ 
    private $firstname; 
    public function setFirstName($aFirstName){ 
     $this->firstname = $aFirstName; 
    } 

    public function getFirstName(){ 
     return $this->firstname; 
    } 
} 

PersonForm.php

<?php 
    $person = new $Person(); 
?> 
<form> 
First Name: <input type="text" name="firstname" value="<?php echo $person->firstname ?>"/> 
</form> 

Я хочу, чтобы сохранить значение, введенное в поле ввода текста с использованием метода setFirstName() класса Person.

Описывает ли value="<?php echo $person->firstname ?>" метод setFirstName()? Или должен ли я делать value="<?php echo $person->setFirstName() ?>"?

Буду признателен за любые объяснения или примеры. PHP-стиль OOP очень похож на Java, поэтому я решил изучить PHP, используя стиль ООП, а не процедурный.

спасибо.

ответ

1

ли написание value="<?php echo $person->firstname ?>" вызвать метод setFirstName()?

$firstname является частной собственностью Person класса, так что вы не можете получить доступ к нему вне класса, как этого. И нет, он не будет называть метод setFirstName().

Или должен ли я делать value="<?php echo $person->setFirstName() ?>"?

Нет, это даст вам ошибку, поскольку setFirstName() метод ожидает аргумент с вызовом метода т.е. вы не проходя ни одного аргумента в этом методе, как $person->setFirstName('My first name'). Сказав это, даже если вы это сделаете, вы не сможете установить любое имя, введенное пользователем, если вы не вызываете этот метод с введенным пользователем значением, например: $person->setFirstName($_POST['firstname']);. Позже вы можете использовать метод getFirstName() в своей форме для отображения введенного пользователем имени.

Вот пример кода для выполнения вашей задачи,

PHP

class Person{ 
    private $firstname = null; 
    public function setFirstName($aFirstName){ 
     $this->firstname = $aFirstName; 
    } 

    public function getFirstName(){ 
     return $this->firstname; 
    } 
} 

$person = new Person(); 

if(isset($_POST['submit'])){ 
    $person->setFirstName($_POST['firstname']); 
} 

HTML

<form action="" method="post"> 
    First Name: <input type="text" name="firstname" value="<?php if($person->getFirstName() != null){ echo $person->getFirstName(); } ?>"/> 
    <input type="submit" name="submit" value="Submit" /> 
</form> 

В приведенном выше примере предполагается, что как HTML и PHP код должен быть на на той же странице.

1

Важным моментом для понимания является PHP работает на стороне сервера. Итак, когда вы запускаете свой PHP-скрипт по запросу, он запускается и заканчивается. Когда вы нажимаете этот скрипт PersonForm.php, он будет генерировать HTML-документ и, например, отправлять его в ваш браузер. То, что у больше нет возможности запускать PHP в вашем браузере (интерфейс).

Чтобы сохранить то, что введено в форме, вы должны использовать JavaScript/jQuery и сделать вызовы AJAX скрипту PHP. Так что JavaScript читает ввод формы и отправляет его на PHP-скрипт на вашем сервере, который будет обрабатывать данные, например, вставлять их в базу данных и т. Д.

Я рекомендую вам больше узнать о вызовах Javascript/jQuery и AJAX для достижения это.

Простой способ достичь этого с помощью jQuery.

main.js

$("#submit").click(function(){ 
    personName = $("input[name=firstname]").val(); 
    $.ajax({ 
     type: 'POST', 
     url: 'SavePerson.php', 
     data: {name: personName}, 
     success: function(result, status, xhr) { 
      popup("Success!"); 
     } 
    }); 
}); 

SavePerson.php

<?php 
    include_once('Person.php'); 

    $person = new Person(); 
    $person->setFirstName($_POST['name']); 

    // Do whatever you want with person... 
?> 

PersonForm.html

<!DOCTYPE html> 
<html> 
    <form> 
     First Name: <input type="text" name="firstname" placeholder="Enter your name"/><br /> 
     <button id="submit" value="Submit">Submit</button> 
    </form> 
    <script src='main.js'></script> 
</html> 
2

Вы будете аб le использовать класс, который вы определили внутри скрипта, вызываемого формой (по крайней мере, так я это сделал).

person.html

<form action="savePerson.php" method="post"> 
First Name: <input type="text" name="firstname" id="firstname"> 
<button type="submit">Submit</button> 
</form> 

savePerson.php

<?php 
class Person{ 
    private $firstname; 
    public function setFirstName($aFirstName){ 
     $this->firstname = $aFirstName; 
    } 

    public function getFirstName(){ 
     return $this->firstname; 
    } 
} 

$person = new Person(); 
$person->setFirstName($_POST['firstname']); 

//do something on the person object 


?> 
2

В этом случае вы не можете объявить Firstname в форме HTML до того, как оно было объявлено, если вы уже не сохранили это значение в другом месте, например. База данных. Вам нужно будет использовать язык на стороне клиента, такой как Javascript, для хранения и вывода данных в реальном времени. С точки зрения PHP, если вы делали вызов базы данных или переменной $aFirstName, ваш PHP, вероятно, выглядел бы примерно так:

Лицо.PHP

class Person{ 

    private $isSet; //Is Name Set on Object Creation 
    private $firstname; 

    public function __construct($aFirstName = false) { //Check if name is created on object creation. 

     if ($aFirstName === false) { 

      $this->isSet = false; 
      $this->firstname = 'No Data'; //Set so your field will always have predefined data. 

     } else { 

      $this->isSet = true; 
      $this->setFirstName($aFirstName); 

     } 
    } 

    private function setFirstName($aFirstName){ 

     $this->firstname = $aFirstName; 

    } 

    public function getFirstName(){ 

     return $this->firstname; 

    } 
} 

PersonForm.php

<?php //Check if Post data is set, if so then set name constructor 

    if (isset($_POST['firstname'])) { 

     $person = new Person($_POST['firstname']); 

    } else { 

     $person = new Person(); 
    } 

?> 


<form method="post" action=""> 
    First Name: <input type="text" name="firstname" value="<?php echo $person->getFirstName() ?>"/> 
    <input type="submit" value="submit"> 
</form> 

Это выведет 'Нет данных', если форма ввода не установлена ​​или 'Добавленная DATA', если задано значение.

Смежные вопросы