学习PHP中的OOP。这是正确的方法吗?
我刚刚开始学习oop,我只是想把最基本的代码集放在一起,以确保我正确地理解事物。我想在$\u POST变量中捕获一个表单条目,并将其传递给一个对象,让它将某些内容输出回浏览器。没有SQL,没有安全措施,只有理解的证明 表格如下:学习PHP中的OOP。这是正确的方法吗?,php,oop,Php,Oop,我刚刚开始学习oop,我只是想把最基本的代码集放在一起,以确保我正确地理解事物。我想在$\u POST变量中捕获一个表单条目,并将其传递给一个对象,让它将某些内容输出回浏览器。没有SQL,没有安全措施,只有理解的证明 表格如下: <html> <head> <title>SignUp Form</title> </head> <body> <?php
<html>
<head>
<title>SignUp Form</title>
</head>
<body>
<?php
if(!empty($_POST['name'])) {
include_once "class.php";
} else {
?>
<form method="post" action="signup.php">
<label for="name">Enter name below:</label></br>
<input type="text" name="name" id="name"></br>
<input type="submit" value="Submit">
</form>
<?php
}
echo $name->processName($_POST['name']); ?>
</body>
</html>
报名表
在下面输入名称:
下面是课堂:
<?php
class Process {
public $entry;
function __construct($entry) {
$this->entry = $entry;
}
public function processName($entry) {
return "You entered " . $this->entry . ".";
}
}
$name = new Process($_POST['name']); ?>
这是没有错误的工作,但现在看来我不应该在表单页面上的echo语句和类页面上的对象中输入$\u POST。这是正确的吗?我应该在$entry属性中收集它吗。它起作用了,但我认为执行不正确。提前谢谢 您的权利您不需要在该函数中输入$\u POST变量,您可以将其更改为该值,它将在不输入POST的情况下工作:
public function processName() {
return "You entered " . $this->entry . ".";
}
因为现在的processName
函数对类的public$entry
变量没有任何作用,它只是在调用函数时回显您输入的内容
您可能想做的是:
更改公共$entry代码>到受保护的$entry代码>
然后:
然后在html中,在构造类之后,您可以将其放入以获取$entry
变量:
echo $name->getEntry();
来自Symfony框架背景。你可以做一些正确的事情:
<?php
class Process
{
protected $post_var;
public function __construct($p)
{
$this->post_var = $p;
}
public function getData()
{
//checking if not post request
if(count($this->post_var) == 0) {
return false;
}
$result_arr = [];
//populating $result_arr with $_POST variables
foreach ($this->post_var as $key => $value) {
$result_arr[$key] = $value;
}
return $result_arr;
}
}
$process = new Process($_POST);
$data = $process->getdata();
if($data)
{
echo $data["name"];
}
?>
<form action="" method="post">
<input type="text" name="name"/>
<input type="submit" name="submit"/>
</form>
IMHO将数据成员公开不是一个好主意。改用getter和setter无论是否包含该类,每次加载页面时都会执行代码>。如果未包含class.php,您将收到错误、警告或通知,具体取决于您的配置。我建议您签出laravel。@MichaelCalkins哇,很快升级!此外,这个问题被标记为OOP,因此将OP定向到laravel实际上不是一个有效的注释。s/protected/private
@PeeHaa-对其进行保护可能是有效的。取决于它的用途。是可能有效。但是经验法则应该是private
,除非需要protected
。您需要确保在html之上包含类的脚本
<?php
class Process
{
protected $post_var;
public function __construct($p)
{
$this->post_var = $p;
}
public function getData()
{
//checking if not post request
if(count($this->post_var) == 0) {
return false;
}
$result_arr = [];
//populating $result_arr with $_POST variables
foreach ($this->post_var as $key => $value) {
$result_arr[$key] = $value;
}
return $result_arr;
}
}
$process = new Process($_POST);
$data = $process->getdata();
if($data)
{
echo $data["name"];
}
?>
<form action="" method="post">
<input type="text" name="name"/>
<input type="submit" name="submit"/>
</form>