Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP用例场景何时应该使用函数构造_Php_Oop - Fatal编程技术网

PHP用例场景何时应该使用函数构造

PHP用例场景何时应该使用函数构造,php,oop,Php,Oop,我开始按照一本规定的书学习PHP OOP,但是在我看来,这不是最好的书,尤其是关于PHP类的部分,会导致相当多的混乱 考虑以下情况: Class User{ function setName($newName) { $this->name = $newName; } function getName() { return $this->name;

我开始按照一本规定的书学习PHP OOP,但是在我看来,这不是最好的书,尤其是关于PHP类的部分,会导致相当多的混乱

考虑以下情况:

     Class User{

    function setName($newName)
        {
            $this->name = $newName;
        }

        function getName()
        {
            return $this->name;
        }
}
该类没有构造方法:

因此,我的问题是:

  • 如果上面的类有一个属性
    $name
    和一个引用
    $name
    变量的函数构造,那么是否有必要创建
    setName()
    方法

  • 如果是,何时适合构建构造方法?什么时候不是?作为一般的经验法则,我假设为所有类属性构建一个构造方法是一个好的实践,对吗


  • 任何建议/帮助/推荐都将不胜感激

    有两种场景可以使用setName和_构造

    1-当您创建一个类的对象并想要初始化该类时,应该使用默认参数初始化该类,然后使用_构造方法

    $obj = new UserName('john'); 
    
    以上方法不能多次正确使用。所以,您需要一种方法,在每次setName出现在图片中时,您都可以更改名称,而无需创建对象

    2-setName是在需要时重新初始化name属性的方法

      $obj = new UserName('john'); //1st step
      echo $obj->getName(); //john displays
      //may be some sql query that gets name from db
      $obj->setName('david'); //here you cannot re-instantiate the object to set the name using construct method.
      $obj->getName(); //david displays
    

    希望这是heps

    有两种场景可以使用setName和_构造

    1-当您创建一个类的对象并想要初始化该类时,应该使用默认参数初始化该类,然后使用_构造方法

    $obj = new UserName('john'); 
    
    以上方法不能多次正确使用。所以,您需要一种方法,在每次setName出现在图片中时,您都可以更改名称,而无需创建对象

    2-setName是在需要时重新初始化name属性的方法

      $obj = new UserName('john'); //1st step
      echo $obj->getName(); //john displays
      //may be some sql query that gets name from db
      $obj->setName('david'); //here you cannot re-instantiate the object to set the name using construct method.
      $obj->getName(); //david displays
    

    希望这是heps

    即使您将
    $name
    传递到构造函数中,您仍然希望这些方法操作name值,而不是使用您无法控制的公共属性。是的,您可以创建
    \u构造($name)
    来设置$name(或者让
    \u构造()
    调用
    setName()
    内部执行此操作)。通常,如果要设置类的某些初始状态,则需要_construct()。是否需要
    setName()
    方法取决于将来是否需要修改$name。即使将
    $name
    传入构造函数,您仍然希望这些方法操作name值,而不是使用您无法控制的公共属性。是,您可以创建一个
    \u构造($name)
    来设置$name(或者让
    \u构造()
    在内部调用
    setName()
    )。通常,如果要设置类的某些初始状态,则需要_construct()。是否需要
    setName()
    方法取决于将来是否需要修改$name。