3 回答
TA贡献1862条经验 获得超6个赞
您需要通过 Method 调用访问 getter,因为没有像 C# 那样真正的(保护)属性支持。(随 php 7.4 一起提供)
accessible($report->getArtGroupAmnt());
如果成员变量是公共的,您可以直接访问它们。
public $accDesc;
echo $instance->accDesc;
要在未设置时具有特殊的返回值,请像这样初始化它们
public $iAmTrue = true;
public $iAmNull = null;
public $iAmNullToo;
public $iAmZero = 0;
public $iAmEmptyString = '';
public $iAmEmptyArray = [];
所以在访问时
var_dump($instance->$iAmEmptyArray);
你会得到一个空数组。因为它们是公开的,所以考虑它可以被覆盖
$instance->iAmEmptyArray = 'Hello World';
所以你应该编写可靠的 getter 和 setter。
private $array;
public setArray($array = []):void {
$this->array = $array;
}
public getArray(): array {
return $this->array ?? [];
}
像 PHPStorm 这样的现代 IDE 可以为您自动完成。
您可能会使用空合并运算符来欺骗一下。公开成员变量并执行以下操作:
public $myArray;
public $myInt;
public $myBool;
public $myString;
$_array = $instance->myArray ?? [];
$_int = $instance->myInt ?? 0;
$_bool = $instance->myBool ?? false;
$_string = $instance->myString ?? '';
TA贡献1836条经验 获得超3个赞
试试这个:
function isPropertyAccessible($obj,$property){
return array_key_exists($property,get_object_vars($obj));
}
function isMethodAccessible($obj,$method){
return in_array($method,get_class_methods($obj));
}
class test{
private $private = 1;
protected $protected = 2;
public $public;
private function funcpriv(){}
public function funcpub(){}
}
$obj = new test;
$results = [];
$results[] = isPropertyAccessible($obj,'notexists');
$results[] = isPropertyAccessible($obj,'private');
$results[] = isPropertyAccessible($obj,'protected');
$results[] = isPropertyAccessible($obj,'public');
$results2[] = isMethodAccessible($obj,'notexists');
$results2[] = isMethodAccessible($obj,'funcpriv');
$results2[] = isMethodAccessible($obj,'funcpub');
var_dump($results);
// array(4) { [0]=> bool(false) [1]=> bool(false) [2]=> bool(false) [3]=> bool(true) }
var_dump($results2);
// array(3) { [0]=> bool(false) [1]=> bool(false) [2]=> bool(true) }
TA贡献2003条经验 获得超2个赞
if(property_exist($object,'propertyName'));
检查我们的对象
if(property_exist($reportArtGroup,'artGroup'))
- 3 回答
- 0 关注
- 130 浏览
添加回答
举报