继承和OOP php中的某些属性?

继承和OOP php中的某些属性?,php,oop,Php,Oop,继承和OOP php中的某些属性 我有甲级 class A{ var a; var b; var c; var d; function todo1() { //more code here } function todo2() { //more code here } function todo_with_var_c()

继承和OOP php中的某些属性

我有甲级

class A{
    var a;
    var b;
    var c;
    var d;

    function todo1()
      {
            //more code here 
      }
     function todo2()
      {
             //more code here 
      }
     function todo_with_var_c()
      {
             //more code here 
      }

    }
$A\=新的A

我想获得一个新对象
$B
a
相同的对象,但除了
var c
todo\u与

所以我在
php

class B extends A{

     //TODO
}

$B_ = new $B;//$B_ will the same object  $A_ but except `var c`
and and `todo_with_var_c`

我怎么做?谢谢

思考一下
扩展这个词。它意味着子类是父类的扩展。思考:多于或特殊情况或“B是A,具有附加责任”。这意味着,您可以添加内容,但不应删除任何内容。如果B应该具有较少的属性,则B应该是父级,A应该是扩展,例如反过来

如果您想在子类中使用,请使用

注意,我将属性
设置为protected
,而在代码中它们是
public
,因为
var
是旧的PHP4语法(您不应该再使用该语法),在没有可见性的情况下。但是属性不应该是公共的,而是通过访问器方法访问的(尽管对此的观点各不相同)

进一步学习资源:


思考一下
这个词的扩展。它意味着子类是父类的扩展。思考:多于或特殊情况或“B是A,具有附加责任”。这意味着,您可以添加内容,但不应删除任何内容。如果B应该具有较少的属性,则B应该是父级,A应该是扩展,例如反过来

如果您想在子类中使用,请使用

注意,我将属性
设置为protected
,而在代码中它们是
public
,因为
var
是旧的PHP4语法(您不应该再使用该语法),在没有可见性的情况下。但是属性不应该是公共的,而是通过访问器方法访问的(尽管对此的观点各不相同)

进一步学习资源:


使用访问修改器访问变量或函数

class A{
    protected $a;
    protected $b;
    private $c;
    protected $d;

    public function todo1()
      {
            //more code here 
      }
     public function todo2()
      {
             //more code here 
      }
     private function todo_with_var_c()
      {
             //more code here 
      }

    }

使用access Modifier访问变量或函数

class A{
    protected $a;
    protected $b;
    private $c;
    protected $d;

    public function todo1()
      {
            //more code here 
      }
     public function todo2()
      {
             //more code here 
      }
     private function todo_with_var_c()
      {
             //more code here 
      }

    }

您可以设置变量的可见性,以便在继承的类中只有您想要的变量可见。在您的示例中,将var c设置为private只会使它对类A可用;e、 g

class A {
  public $a;
  public $b;
  private $c;
  public $d;

  ...

}

唯一可能的缺点是,要在类A之外访问$c,您需要一个getter方法。您可以在此处获得有关可见性的更多信息(以及更详细的示例):

您可以设置变量的可见性,以便只有您想要的变量在继承的类中可见。在您的示例中,将var c设置为private只会使它对类A可用;e、 g

class A {
  public $a;
  public $b;
  private $c;
  public $d;

  ...

}

唯一可能的缺点是,要在类A之外访问$c,您需要一个getter方法。您可以在此处获得有关可见性的更多信息(以及更详细的示例):

我们不应更改A类,因为在其他代码中使用的类A.is是可能的,如果我们不想改变A的行为,实际上这比unset方法1要好。我想你应该解释一下你的答案,以帮助他理解唯一可能的问题是如果他已经通过直接访问
$c
打破了封装。让我们面对现实吧,这是很有可能的。@Gordon感谢你的回答和良好的资源。并感谢所有留下评论的人。帮助得更好。我们不应该改变A级,因为在其他代码中使用的类A.is是可能的,如果我们不想改变A的行为,实际上这比unset方法1要好。我想你应该解释一下你的答案,以帮助他理解唯一可能的问题是如果他已经通过直接访问
$c
打破了封装。让我们面对现实吧,这是很有可能的。@Gordon感谢你的回答和良好的资源。感谢所有留下评论的人。帮助得更好。无论如何,你为什么需要这个?只要不使用字段和方法,就应该能够绕过不需要的字段和方法。还是我遗漏了你的问题?你为什么需要这个?只要不使用字段和方法,就应该能够绕过不需要的字段和方法。还是我遗漏了你的问题?