Nasıl bir ilişki bu tür (miras, kompozisyon, başka bir şey) elde edebilirsiniz?

1 Cevap php

Ben kişi ve öğrenci iki olan bir uygulama için sınıfları, bir vakıf kurmak istiyoruz. Bir kişi ya da bir öğrenci olmayabilir ve bir öğrencinin her bir kişidir. Bir öğrenci bir kişi "bir" olduğunu gerçeği miras denemek için götürdü, ama ben kişi bir örneğini döndürür bir DAO var ve ben daha sonra belirlemek istiyoruz durumda işe nasıl göremiyorum eğer o kişi Bir öğrenci ve çağrı öğrenci bunun için yöntemler ilgilidir.

class Person {
    private $_firstName;

    public function isStudent() {
        // figure out if this person is a student
        return true; // (or false)
    }
}

class Student extends Person {
    private $_gpa;

    public function getGpa() {
        // do something to retrieve this student's gpa
        return 4.0; // (or whatever it is)
    }
}

class SomeDaoThatReturnsPersonInstances {
    public function find() {
        return new Person();
    }
}

$myPerson = SomeDaoThatReturnsPersonInstances::find();

if($myPerson->isStudent()) {
    echo 'My person\'s GPA is: ', $myPerson->getGpa();
}

Bu tabii ki çalışmaz, ama bu etkiyi elde etmek için en iyi yolu nedir? Bir kişi öğrenci "a sahip" değildir, çünkü kompozisyon sağ zihnimde sondası değildir. Ben mutlaka bir çözüm aramıyorum ama belki sadece bir terim veya ifade aramak için. Ben yapmaya çalışıyorum ne diyoruz ne gerçekten emin değilim, çünkü ben çok şans olmadı. Teşekkür ederiz!

1 Cevap

<?php
class Person {
    #Can check to see if a person is a student outside the class with use of the variable
    #if ($Person->isStudentVar) {}
    #Or with the function
    #if ($Person->isStdentFunc()) {}

    public $isStudentVar = FALSE;  

    public function isStudentFunc() {
        return FALSE;
    }
}

class Student extends Person {
    #This class overrides the default settings set by the Person Class.
    #Also makes use of a private variable that can not be read/modified outside the class

    private $isStudentVar = TRUE;  

    public function isStudentFunc() {
        return $this->isStudentVar;
    }

    public function mymethod() {
        #This method extends the functionality of Student
    }
}

$myPerson1 = new Person;
if($myPerson1->isStudentVar) { echo "Is a Student"; } else { echo "Is not a Student"; }
#Output: Is not a Student

$myPerson2 = new Student;
if($myPerson2->isStudentFunc()) { echo "Is a Student"; } else { echo "Is not a Student"; }
#Output: Is a Student
?>

Ben bir yolu seçmek ve ona sopa olacaktır. Sadece çeşitli fikirler ve teknikler deomonstrating.