Php 继承静态方法
我有以下问题;我的应用程序中有两个模型,但它们存储在数据库中的同一个表中。它们可以通过Php 继承静态方法,php,oop,Php,Oop,我有以下问题;我的应用程序中有两个模型,但它们存储在数据库中的同一个表中。它们可以通过类型列进行区分,第一列为0,第二列为1 在我的应用程序中,我创建了两个类,每种类型一个。但是,我只想创建一次查询,并使用静态成员来确定类型。基本上,我想要实现的目标如下: class A { public $Description; //From the database public static function GetAll() { $query = "SELEC
类型
列进行区分,第一列为0,第二列为1
在我的应用程序中,我创建了两个类,每种类型一个。但是,我只想创建一次查询,并使用静态成员来确定类型。基本上,我想要实现的目标如下:
class A
{
public $Description; //From the database
public static function GetAll()
{
$query = "SELECT * FROM letters WHERE type = " . self::getType();
echo $query;
}
private static function getType()
{
return 0;
}
}
class B
extends A
{
public $SomeOtherProperty; //B also has another property, which A doesnt have. Its stored an another table.
private static function getType()
{
return 1;
}
}
A::GetAll(10);
B::GetAll(10);
但是,PHP不支持静态memberwriting,这会导致以下输出:
从type=0的字母中选择*
从type=0的字母中选择*
如果子类可以指定自己的类型,那么实现这种结果的最佳方法是什么 您可以尝试在类中使用静态变量,表示
$type
。据我所知,您可以覆盖静态变量
这应该是wotk for php>5.3。在PHP5.2中,它的工作原理与您在注释中所描述的一样。首先,在继承方法getType()时,应该使用受保护的可见性: 要获取当前类型,请使用PHP 5.3的新特性static关键字:
Static确保使用后期绑定,因此将使用实际类型的方法。如果使用php>=5.3,则可以使用Static关键字:
public static function GetAll()
{
$query = "SELECT * FROM letters WHERE type = " . static::getType();
echo $query;
}
如果没有,可以将另一个参数传递给GetAll()方法以提供类型:
public static function GetAll($type)
{
$query = "SELECT * FROM letters WHERE type = " . $type;
echo $query;
}
这不是真正的答案,但应该避免使用这样的静态类。PHP的静态调用基本上是一种对相关函数进行分组的方法,而不是使用继承和其他oop相关技术。类本身不是静态的,具有模型的所有属性。然而,获取数据库中所有A的方法是静态的。我尝试过这个方法,但它不起作用。类(A)的当前实例的值在调用基类上的方法时使用。啊,这就是新的
后期静态绑定
特性。非常感谢,它就像一个符咒!
public static function GetAll()
{
$query = "SELECT * FROM letters WHERE type = " . static::getType();
echo $query;
}
public static function GetAll($type)
{
$query = "SELECT * FROM letters WHERE type = " . $type;
echo $query;
}