Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.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 如果值为null,则未定义属性_Php - Fatal编程技术网

Php 如果值为null,则未定义属性

Php 如果值为null,则未定义属性,php,Php,我尝试在PHP中验证select字段。我准备了代码,但解释者给了我这个通知: 注意:中未定义的属性:Test5::$property /第22行的opt/lampp/htdocs/mvc3/controller/admin/test5.php为空 当我没有从列表中选择任何内容时,就会出现问题。有人知道如何解决这个问题吗 我提供代码: <form action="test5.php" method="post"> <select name="select">

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

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

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

我提供代码:

<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());
    }
?>

选择。。。
苹果
覆盆子
香蕉
松果体
发送

如果未指定值,则默认情况下,您的代码将返回NULL,或者指定一些不同的默认值(在
if(isset($\u POST[$paramName])
中添加一个为属性指定一些默认值的else),或者将其保持原样。该通知只是警告您,您可以通过添加
错误报告(0)来关闭这些通知
在您的类代码上方。

当您没有从列表中选择任何内容时,您从未设置要获取的属性。请尝试将属性
属性
添加到类中。该属性的默认值为
null

private $property;
private $paramName;
private $default;
您可以在构造函数中设置默认值,例如:

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

无论发生什么情况,您都必须定义
$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());
}
这将防止该错误,因为它是默认设置的。默认情况下,未在类中分配的属性返回未定义的
,因为它未定义。通过使用空值定义它,可以为输入验证提供一些错误检查空间

从PHP手册中查看这一点


因为它是不确定的,所以只有当isset STATINT返回true时,您才定义它,您还需要其他STATINT

<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]);
        }
else{ $this->property=" ";}
        return $this;
    }
    public function getProperty() {
        return $this->property;
    }
}
$test5 = new Test5;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $test5->getParam('select', false);
    var_dump($test5->getProperty());
  }
?>

选择。。。
苹果
覆盆子
香蕉
松果体
发送

出现这种情况时会发生错误

if (isset($_POST[$paramName])) {
    $this->property = trim($_POST[$paramName]);
}
计算结果为
false
,因为名为
property
的属性在
Test5
中不存在

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

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

class Test5
{
    private $property;

    // ...
}
有关参考,请参阅:


我没有仔细阅读,但这让我大吃一惊
$default=null
尝试将$property添加到私有属性`private$paramName,$default,$property;`
var$property
?使用
var
是一个古老的PHP4遗迹。您应该改为设置可见性。只需以添加其他属性的相同方式添加它:
private>$paramName、$default、$property
(更好的做法是使用自己的可见性设置自己行上的每个变量)。如果您不给它赋值,默认情况下它将是
null
。但从PHP 5.6开始,您可以预先定义一个值。因此,我正在演示这种能力,以防op不试图简单地返回默认值。现在您已经失去了我。您仍然可以使用
var$property=null;
,但使用它与
是一样的public$property=null;
,甚至是
public$property;
。在这种情况下,它可能应该是
private$property;
。为什么要在同一个类中混合使用旧样式和新样式呢?只要保持一致就行了。我真的不明白你说的是什么意思:“PHP5.6你可以预先定义一个值”?这就是为什么我使用了一个引用@MagnusEriksson。我并不反对。良好的编码实践将使用一致性,但这就是为什么我使用了一个引用,其中包含您提到的每个示例,我已经提到过,还有一些其他人提到过。此外,当我说“PHP5.6您可以预定义一个值”,我直接引用了我的引用…《PHP手册》…无需将其设置为
null
。如果定义属性而不为其赋值,则默认为
null
\u construct()
方法不是必需的。您可以在定义其可见性时设置该值。例如:
private$property='tacos';
不,请不要通过关闭错误报告来解决问题。而是解决问题。是的,解决问题是一种方法,只是提醒他可以隐藏该通知,但显示该通知是有原因的。