Рубрики
Uncategorized

Примеры трех методов получения атрибутов объектов с помощью PHP

Автор оригинала: David Wong.

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