3

ModelPHPでクラスのプロパティ名を取得したい。Javaでは、次のようにできます:

モデル.java

public class Model {

    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Main.java

import java.lang.reflect.Field;

public class Main {

    public static void main(String[] args) {
        for(Field field : Model.class.getDeclaredFields()) {
            System.out.println(field.getName());
        }
    }
}

それは印刷されます:

id
name

PHPでそれを行うにはどうすればよいですか?

Model.php

<?php 

    class Model {
        private $id;
        private $name;

        public function __get($property) {
            if(property_exists($this, $property))
                return $this->$property;
        }

        public function __set($property, $value) {
            if(property_exists($this, $property))
                $this->$property = $value;

            return $this;
        }
    }
?>

index.php

<?php

    # How to loop and get the property of the model like in Main.java above?
?>

ソリューションの更新

解決策 1:

<?php

    include 'Model.php';

    $model = new Model();

    $reflect = new ReflectionClass($model);
    $props   = $reflect->getProperties(ReflectionProperty::IS_PRIVATE);

    foreach ($props as $prop) {
        print $prop->getName() . "\n";
    }
?>

解決策 2:

<?php

    include 'Model.php';

    $rc = new ReflectionClass('Model');
    $properties = $rc->getProperties();

    foreach($properties as $reflectionProperty) {
        echo $reflectionProperty->name . "\n";
    }
?>
4

2 に答える 2

3

私はあなたが探していると思いますReflectionClass::getPropertiesか?

PHP >= 5 で利用可能

また、利用可能な、get_object_vars

PHP 4 & 5 で利用可能

どちらのドキュメント ページにも例がリストされていますが、問題がある場合は、質問を更新するか、発生している特定の問題について別の質問をしてください (そして、試したことを示してください)。

于 2012-09-10T01:46:00.723 に答える
3

Java と同じように、PHP に組み込まれている Reflection 機能を使用できます。

<?php
$rc = new ReflectionClass('Model');
$properties = $rc->getProperties();
foreach($properties as $reflectionProperty)
{
    echo $reflectionProperty->name;
}

リフレクションに関する PHP マニュアルはこちらを参照してください。

于 2012-09-10T01:46:55.357 に答える