Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
学习PHP中的OOP。这是正确的方法吗?_Php_Oop - Fatal编程技术网

学习PHP中的OOP。这是正确的方法吗?

学习PHP中的OOP。这是正确的方法吗?,php,oop,Php,Oop,我刚刚开始学习oop,我只是想把最基本的代码集放在一起,以确保我正确地理解事物。我想在$\u POST变量中捕获一个表单条目,并将其传递给一个对象,让它将某些内容输出回浏览器。没有SQL,没有安全措施,只有理解的证明 表格如下: <html> <head> <title>SignUp Form</title> </head> <body> <?php

我刚刚开始学习oop,我只是想把最基本的代码集放在一起,以确保我正确地理解事物。我想在$\u POST变量中捕获一个表单条目,并将其传递给一个对象,让它将某些内容输出回浏览器。没有SQL,没有安全措施,只有理解的证明

表格如下:

<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>