2017-06-12 8 views
1

を拡張しなさいは唯一私がクラスを持っているクラス変数

class Student extends Person { 
    public $grade; 
} 

の問題は、私は、拡張された生徒のクラスにget_object_vars()を使用する場合、Iまた、Personから$id,$firstName$lastNameを受け取ることもできます。 どうすれば入手できますか$gradeからの学生ですか?

私は、「保護された」として、人の変数を作ってみましたが、その後、私はget_object_vars()

+0

あなたはこれを達成するために何をしようとしていますか? – gvlasov

+0

@gvlasov CRUDクエリをビルドするDBクラスがあり、オブジェクト変数はデータベースの列です。生徒はDBの別のテーブルに多くのプロパティを持ちます。 –

答えて

1

でそれらを取得することができませんさて、あなたはおそらく、あなたの希望する結果を得るために一つの追加方法とReflectionクラスに必要になります。追加props()方法と

class Person { 
    public $id; 
    public $firstName; 
    public $lastName; 
} 

そしてStudentクラス:

はここで触れられていない、あなたのPersonクラスです

class Student extends Person { 
    public $grade, $age; 

    function props(){ 
    $class = new ReflectionClass($this); 
    $class = $class->getParentClass(); 
    $props = $class->getProperties(); 

    $original = array_map(function($e){ 
     return $e->name; 
    }, $props); 

    $original = array_flip($original); 

    return array_diff(array_keys(get_class_vars(__CLASS__)), array_keys($original)); 
    } 
} 

props()方法が唯一の子クラスで宣言されたプロパティが含まれます。

var_export((new Student)->props()); // array (0 => 'grade', 1 => 'age',) 
0

改変ReflectionClass::getPropertiesを使用してください。

$studentReflectionClass = new ReflectionClass('Student'); 
$studentProperties = array_filter(
    $studentReflectionClass->getProperties(), 
    function ($properties) use ($studentReflectionClass) { 
     return $properties->getDeclaringClass()->getName() === $studentReflectionClass->getName(); 
    } 
); 

dump($studentProperties); 

出力:

array:1 [      
    0 => ReflectionProperty {#4 
     +name: "grade" 
     +class: "Student" 
     modifiers: "public" 
    } 
] 
関連する問題