В этой статье иллюстрируются три метода получения атрибутов объектов с помощью PHP. Поделитесь для вашей справки следующим образом:
Просматривая сегодня исходный код Yii, я обнаружил, что yii\база\Модель Среда атрибут() Метод заключается в извлечении общедоступного нестатического атрибута объекта путем отражения. Помните, что весь код, который вы видели раньше, использовался get_object_vars () , Полученный этой функцией, вчера мы просмотрели документ PHP и обнаружили, что мы также можем использовать foreach для обхода свойств объекта. Поэтому напишите пример для практики.
class TestClass {
private $a;
protected $b;
public $c;
public $d;
public static $e;
private function funcA() {
}
protected function funcB() {
}
public function funcC() {
}
public function getPropertyMethodOne() {
echo "[get_object_vars]", PHP_EOL;
$vars = get_object_vars($this);
foreach ($vars as $k => $v) {
echo $k, ' => ', $v, PHP_EOL;
}
}
public function getPropertyMethodTwo() {
echo "[foreach object]", PHP_EOL;
foreach ($this as $k => $v) {
echo $k, ' => ', $v, PHP_EOL;
}
}
public function getPropertyMethodThree() {
echo "[reflection]", PHP_EOL;
$class = new ReflectionClass($this);
foreach ($class->getProperties(ReflectionProperty::IS_PUBLIC) as $property) {
if (!$property->isStatic()) {
echo $property->getName(), ' => ', $property->getValue($this), PHP_EOL;
}
}
}
}
Тестовый код 1
$obj = new TestClass();
echo "[get_object_vars]", PHP_EOL;
$vars = get_object_vars($obj);
foreach ($vars as $k => $v) {
echo $k, ' => ', $v, PHP_EOL;
}
echo "[foreach object]", PHP_EOL;
foreach ($obj as $k => $v) {
echo $k, ' => ', $v, PHP_EOL;
}
echo "[reflection]", PHP_EOL;
$class = new ReflectionClass($obj);
foreach ($class->getProperties(ReflectionProperty::IS_PUBLIC) as $property) {
if (!$property->isStatic()) {
echo $property->getName(), ' => ', $property->getValue($obj), PHP_EOL;
}
}
Выход:
[[get_object_vars] c => d => [каждый объект] c => d => [отражение] криста => d =>
Очевидно, что когда три метода используются вне класса, результат один и тот же. get_object_vars() И foreach являются общедоступными нестатическими атрибутами объекта, и общедоступные нестатические атрибуты необходимо отфильтровать вручную с помощью отражения.
Тестовый код 2
$obj = new TestClass(); $obj->getPropertyMethodOne(); $obj->getPropertyMethodTwo(); $obj->getPropertyMethodThree();
выход
[get_object_vars] a => b => c => d => [каждый объект] a => b => c => d => [отражение] c => d =>
Таким образом, get_object_vars() При использовании внутри класса с foreach могут быть получены атрибуты экземпляра private, protected и public. Не нужно говорить об отражении. С помощью ручной фильтрации можно получить все виды атрибутов.
Больше читателей, интересующихся контентом, связанным с PHP, могут ознакомиться с темами этого сайта: Введение в объектно-ориентированное программирование Php, Введение в навыки работы с массивами PHP, Введение в базовую грамматику PHP, Краткое описание работы с PHP и использования операторов, Краткое описание использования строк Php, Введение в работу с базой данных php +mysql и Общие операции с базами данных php. Краткое изложение навыков письма ___________
Я надеюсь, что эта статья будет полезна для разработки PHP – программ для всех.