Php 如果值为null,则未定义属性
我尝试在PHP中验证select字段。我准备了代码,但解释者给了我这个通知: 注意:中未定义的属性:Test5::$property /第22行的opt/lampp/htdocs/mvc3/controller/admin/test5.php为空 当我没有从列表中选择任何内容时,就会出现问题。有人知道如何解决这个问题吗 我提供代码: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">
<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';
不,请不要通过关闭错误报告来解决问题。而是解决问题。是的,解决问题是一种方法,只是提醒他可以隐藏该通知,但显示该通知是有原因的。