如果value为null,则为未定义的属性

时间:2017-07-18 20:21:12

标签: php

我尝试验证PHP中的select字段。我准备了代码,但解释员给我这个通知:

  

注意:未定义的属性:Test5 :: $ property in   /opt/lampp/htdocs/mvc3/controller/admin/test5.php第22行NULL

当我没有从列表中选择任何内容时,会出现问题。有谁知道如何解决这个问题?

我提供代码:

<form action="test5.php" method="post">
    <select name="select">
        <option selected="selected" disabled="disabled">Select...</option>
        <option>Apple</option>
        <option>Raspberry</option>
        <option>Banana</option>
        <option>Pineaple</option>
    </select>
    <button type="submit" name="button">Send</button>
</form>
<?php
    class Test5 {
        private $paramName, $default;

        public function getParam($paramName, $default = null) {
            if (isset($_POST[$paramName])) {
                $this->property = trim($_POST[$paramName]);
            }
            return $this;
        }
        public function getProperty() {
            return $this->property;
        }
    }
    $test5 = new Test5;
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $test5->getParam('select', false);
        var_dump($test5->getProperty());
    }
?>

5 个答案:

答案 0 :(得分:3)

当您从列表中选择任何内容时,您永远不会设置您尝试获取的属性。尝试将属性property添加到类中。它将null作为默认值:

private $property;
private $paramName;
private $default;

您可以在构造函数中设置默认值,例如:

public function __construct() {
   $this->property = 'lorem ipsum';
}

答案 1 :(得分:1)

无论如何,您都必须定义$property。因此,您可以执行以下操作:

 class Test5 {
    private $paramName, $default;

    /**
     * Although the default is NULL, this 
     * demonstrates you can set to just about anything
    */
    private $property = null; 

    public function getParam($paramName, $default = null) {
        if (isset($_POST[$paramName])) {
            $this->property = trim($_POST[$paramName]);
        }
        return $this;
    }
    public function getProperty() {
        return $this->property;
    }
}
$test5 = new Test5;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $test5->getParam('select', false);
    var_dump($test5->getProperty());
}

这样可以防止默认情况下设置的错误。通过默认类中未分配的属性返回undefined,因为它未定义。通过使用null值定义它,可以为输入验证提供一些错误检查空间。

从PHP手册

中查看

PHP: Properties - Manual

答案 2 :(得分:0)

如果没有赋值,默认情况下你的代码将返回NULL,或者指定一些不同的默认值(在if(isset($_POST[$paramName])中添加一个为属性赋予一些默认值的else)或保持原样。该通知只是警告您,您可以通过在类代码上方添加error_reporting(0);来关闭这些通知。

答案 3 :(得分:0)

因为它是无法解释的,所以只有当isset statment返回true时才定义它,你还需要其他的法则。

undefined method ___ for nil:NilClass

答案 4 :(得分:0)

此条件

时发生错误
if (isset($_POST[$paramName])) {
    $this->property = trim($_POST[$paramName]);
}

评估为false,因为property中不存在名称为Test5的媒体资源。

但是,如果条件的计算结果为true,那么当您在te条件的主体中为其赋值时,它将以public可见性动态创建。

为避免错误,请按照建议声明属性:

class Test5
{
    private $property;

    // ...
}

供参考,见: