php获取类/对象变量和继承

php获取类/对象变量和继承,php,class,inheritance,object,Php,Class,Inheritance,Object,假设我有两门课 class A extends class B 类有自己的字段 B类有自己的字段 由于类A扩展了B,因此类A还包含B的字段 是否有方法获取仅用于类a的字段列表,而不是从类B继承的字段列表,因为对类a的对象调用get\u object\u vars()也会返回类B的字段。您可以执行以下操作: array_diff(get_object_vars($objectA), get_object_vars($objectB)); 编辑,也可以对类执行相同的操作: array_diff(

假设我有两门课

class A extends class B
类有自己的字段 B类有自己的字段

由于类A扩展了B,因此类A还包含B的字段

是否有方法获取仅用于类a的字段列表,而不是从类B继承的字段列表,因为对类a的对象调用
get\u object\u vars()
也会返回类B的字段。您可以执行以下操作:

array_diff(get_object_vars($objectA), get_object_vars($objectB));
编辑,也可以对类执行相同的操作:

array_diff(get_class_vars(CLASS A), get_class_vars(CLASS B));

它是关于对象,而不是类。是否希望看到解决方案将失败的代码示例?在创建子类的对象时,如果取消设置某些属性,会怎么样?在某些方法中分配的属性如何?我所说的“失败”是指“提供不正确的结果”,而不是抛出异常的失败(您描述为有偏见的事情)。只有当
$objectA
$objectB
不是对象时,您的代码才会产生警告,但这绝不是此代码的问题。首先,他自己谈到了在对象上使用get_objects_vars()。其次,假设类b有一个属性调用foo,类a有另一个属性调用boo。我的代码将返回boo。现在,如果您决定在对象a上取消设置boo,并使用我的代码,我的代码将返回一个空数组。这对于类a来说不是真的,但是对于对象a来说是完全正确的。此外,可以使用get_class_vars()对类执行完全相同的操作。