PHP OOP使用表单元素

时间:2016-12-11 16:25:49

标签: php oop pdo

我来自Java编程,我对PHP OOP风格有所了解。在 Java Server Faces 中,我使用了 setters getters ,我用它来设置表单中输入的数据的字段值。

例如,

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();方法

所以我做了一些谷歌,看看它是如何用PHP的OOP风格完成的。

所以在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>

我想使用Person类的setFirstName()方法存储在输入文本字段中输入的值。

value="<?php echo $person->firstname ?>"是否会调用setFirstName()方法? 或者我应该value="<?php echo $person->setFirstName() ?>"

我很感激任何解释或例子。 PHP的OOP风格与Java非常相似,这就是为什么我决定使用OOP风格而不是程序来研究PHP的原因。

谢谢。

4 个答案:

答案 0 :(得分:2)

您将能够使用您在表单调用的脚本中定义的类(至少按照我的方式)。

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


?>

答案 1 :(得分:2)

在这种情况下,您无法在声明HTML表单之前声明Firstname,除非您已将此值存储在其他地方,例如数据库。您需要使用Javascript等客户端语言来实时存储和输出数据。就PHP而言,如果您正在调用数据库或预定义变量$aFirstName,那么您的PHP可能看起来像这样:

<强> Person.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>

这将输出“No Data&#39;如果没有设置表格输入或“你插入的数据”#39;如果设置了值。

答案 2 :(得分:1)

要理解的重点是 PHP正在服务器端工作。因此,当您通过请求运行PHP脚本时,它会运行并完成。当您点击PersonForm.php脚本时,它将生成HTML文档并将其发送到您的浏览器。它没有机会在您的浏览器(前端)上运行PHP。

要存储在表单中输入的内容,您必须使用JavaScript / jQuery并对PHP脚本进行AJAX调用。因此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>

答案 3 :(得分:1)

  

value="<?php echo $person->firstname ?>"是否会调用setFirstName()方法?

$firstnamePerson类的私有属性,因此您无法在类之外访问它,例如 。不,它不会调用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代码都应该在同一页面上。