我来自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的原因。
谢谢。
答案 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()
方法?
$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代码都应该在同一页面上。