내 데이터베이스 클래스가 상속되는 상위 클래스 (후기 정적 바인딩 사용)를 작성했습니다. 각 테이블 열을 자식 클래스의 public 속성으로 할당하는 생성자를 작성하려고합니다. 지금까지 잘 작동하는 하위 클래스의 생성자를 작성할 수 있지만 모든 하위 클래스 속성이 자동으로 정의되도록 부모 클래스에 넣고 싶습니다.부모 클래스를 통해 호출 된 클래스 속성 정의
class Sale extends DatabaseObject {
protected static $table_name="invoices";
protected static $db_fields = array();
function __construct() {
global $database;
$query_cols = " SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_NAME LIKE '" . self::$table_name . "' AND TABLE_SCHEMA LIKE '" . DB_NAME . "' ORDER BY ORDINAL_POSITION ASC";
$cols = $database->query($query_cols);
while($col = $database->fetch_array($cols)) {
if(!property_exists($this,$col['COLUMN_NAME'])) {
$this->$col['COLUMN_NAME']=NULL;
array_push(self::$db_fields,$col['COLUMN_NAME']);
}
}
}
}
내가 호출 된 클래스의 속성을 정의 할 수 있어야 부모에서이 생성자를 사용하려면 : 여기 내 아이 클래스입니다.
function __construct() {
$class_name = get_called_class();
$query_cols = " SELECT COLUMN_NAME FROM information_schema WHERE TABLE_NAME LIKE '" . static::$table_name . "' AND TABLE_SCHEMA LIKE '" . DB_NAME . "'";
$query_cols .= " ORDER BY ORDINAL_POSITION ASC";
$cols = $database->query($query_cols);
while($col = $database->fetch_array($cols)) {
if(!property_exists($class_name,$col['COLUMN_NAME'])) {
// the code to define called class public property?!
}
}
}
미리 감사드립니다.
클래스의 공용 멤버는 어떨까요?! 정적 멤버의 경우 '정적'을 사용하지만 공개 멤버는 무엇입니까? 어떻게 적용 할 수 있습니까? – MehdiK
정적 및 공용은 상호 배타적이지 않으며 구성원은 공용, 보호 또는 개인, 정적 또는 비 정적 중 하나 일 수 있습니다. 비 정적 멤버의 경우,'$ this' (또는 다른 변수 참조)를 사용하여 액세스 할 수 있으므로'self','static' 등은 필요 없습니다. – Stephen
감사합니다. '$ this' 문제를 해결했습니다! – MehdiK