检查 class 是否在 PHP 中扩展了不同的 class
Check if a class extends a different class in PHP
我大约有这个 PHP 代码:
class DatabaseItem
{
private const CLASS_NAMES = null;
public function doStuff()
{
if ($this::CLASS_NAMES['property'] instanceof self)
{
//Construct the Profile Picture object and save it into the property of the $user instance
}
}
}
class ProfilePicture extends DatabaseItem { /* Unimportant stuff */ }
class User extends DatabaseItem
{
protected const CLASS_NAMES = array('property' => ProfilePicture);
protected $profilePic;
}
$user = new User();
$user->doStuff();
我知道这段代码看起来很不合逻辑,但我不得不大大简化它。不管怎样,问题是,条件 ($this::CLASS_NAMES['property'] instanceof self)
的计算结果总是为假。有没有办法检查 class(不是它的实例)是否扩展或实现了不同的 class/interface?
使用is_subclass_of()
函数。
if (is_subclass_of(self::CLASS_NAMES['property'], get_class($this)))
我尝试了你的建议,对我有用的东西正在改变
protected const CLASS_NAMES = array('property' => ProfilePicture);
至
protected const CLASS_NAMES = array('property' => ProfilePicture::class);
然后改变
if ($this::CLASS_NAMES['property'] instanceof self)
至
if (is_subclass_of($this::CLASS_NAMES['property'], __CLASS__))
所以我一次性使用了你所有的答案。非常感谢您的帮助。
P.S。我不确定我是否应该在评论中 post 这个,但我认为结论应该清晰可见。
我大约有这个 PHP 代码:
class DatabaseItem
{
private const CLASS_NAMES = null;
public function doStuff()
{
if ($this::CLASS_NAMES['property'] instanceof self)
{
//Construct the Profile Picture object and save it into the property of the $user instance
}
}
}
class ProfilePicture extends DatabaseItem { /* Unimportant stuff */ }
class User extends DatabaseItem
{
protected const CLASS_NAMES = array('property' => ProfilePicture);
protected $profilePic;
}
$user = new User();
$user->doStuff();
我知道这段代码看起来很不合逻辑,但我不得不大大简化它。不管怎样,问题是,条件 ($this::CLASS_NAMES['property'] instanceof self)
的计算结果总是为假。有没有办法检查 class(不是它的实例)是否扩展或实现了不同的 class/interface?
使用is_subclass_of()
函数。
if (is_subclass_of(self::CLASS_NAMES['property'], get_class($this)))
我尝试了你的建议,对我有用的东西正在改变
protected const CLASS_NAMES = array('property' => ProfilePicture);
至
protected const CLASS_NAMES = array('property' => ProfilePicture::class);
然后改变
if ($this::CLASS_NAMES['property'] instanceof self)
至
if (is_subclass_of($this::CLASS_NAMES['property'], __CLASS__))
所以我一次性使用了你所有的答案。非常感谢您的帮助。
P.S。我不确定我是否应该在评论中 post 这个,但我认为结论应该清晰可见。