2

2つのクラスがあります。1つは一般的なデータベースクエリを含むDBobjectで、もう1つはそれぞれ特定のデータベースクエリを持つ子クラスです。ここで問題となるのは、親クラスのtable_name変数を初期化しようとすると、初期化されないことです。私は多くの方法を試しましたが、クエリが実行されたときにテーブルが空であることを示しています。コードは次のとおりです。

<?php
class DBobject {

 public static $table_name="";

 public static function find_all(){
  global $database;
  return self::find_by_sql("SELECT * FROM ".self::$table_name);
 }

 }
?>


<?php
class Catagory extends DBobject{
 public static $table_name ="catagory";
}
?>


?>

主な用途:

<?php
$cata = Catagory::find_all();
     foreach($cata as $catag){
     echo "Catagory Name :" . $catag->name."<br/>";
} 


 ?>

DBobject関数find_all()が機能するテーブルのタイプを初期化できるようにしたいと思います。これを手伝ってください。これは私が得るエラーです。クエリにテーブルの名前が含まれていないことに注意してください。

 Database query Failed You have an error in your SQL syntax; check the manual that corresponds to  your MySQL server version for the right syntax to use near '' at line 1

last SQL query: SELECT * FROM 
4

1 に答える 1

0

php 5.3以降を使用している場合は、「後期静的バインディング」が追加されているため、これを行うことができます。

http://php.net/manual/en/language.oop5.late-static-bindings.php

get_called_class()またはstatic ::(self::の代わりに)を使用して、コードが含まれているクラスの代わりにCALLEDされたクラスを参照できます。

于 2012-09-03T20:48:37.410 に答える