В этой статье иллюстрируются три метода получения атрибутов объектов с помощью 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 – программ для всех.