私はphpとmysqlを使って作業しますが、時々私はPHPオブジェクトを返すオブジェクト、ロードリストなどのために私のPHPクラスをインスタンス化する必要がありますが、時にはクラスコンストラクタを使用します。phpクラスでコンストラクタdobleを作成できますか?
私はクラス内にドブルコンストラクタを作成できますか?
例:私のアクセスレイヤで
class Student {
private $id;
private $name;
private $course;
function __construct() {
}
//get set id and name
function setCourse($course) {
$this->course = $course;
}
function getCourse() {
$this->course = $course;
}
}
class Course {
private $id;
private $description;
function __construct($id) {
this->id = $id;
}
//get set, id, description
}
いつか私は例えば、異なる方法 でコンストラクタを使用します。
$result = $stmt->fetchAll();
$listStudent = new ArrayObject();
if($result != null) {
foreach($result as $row) {
$student = new Student();
$student->setId($row['id']);
$student->setName($row['name']);
$student->setCourse(new Course($row['idcourse'])); //this works
$listStudent ->append($sol);
}
}
をしかし、時には、私は例えば、別の方法でコンストラクタを使用する必要があります
$result = $stmt->fetchAll();
$listCourses = new ArrayObject();
if($result != null) {
foreach($result as $row) {
$course = new Course(); //but here not work, becouse Class course receives a id
$course->setId($row['idcourse']);
$course->setDescription($row['description']);
$listCourses->append($sol);
}
}
英語が非常に悪い、 私はあなたが私に
あなたの英語は良いですが、何を達成したいのか分かりません。 2つ(またはそれ以上)のコンストラクタを持つクラスを作成しますか? – axiac
コンストラクタの目的は、オブジェクトのプロパティを初期化して使用できるようにすることです。 'Student 'クラスで発生するような空のコンストラクタ(+ setter)は、OOPとして偽装された手続き型プログラミングの兆候です。 'Student'プロパティの初期化をコンストラクタに入れ、setterを削除します。 – axiac
こんにちは、私は達成するためには、コンストラクタとコンストラクタなしで、原因エラーなしでオブジェクトを作成することです: $コース=新しいコース(); - >作品 と $コース=新しいコース($ id); - >も動作します 私は仕事がありません: $ course = new Course(); - >動作しません と $コース=新しいコース($ id); - >作品 あなたの時間に感謝 –