php - 开始 oop php 问题 : do constructors take the place of getter?

标签 php oop constructor

我正在完成本教程: http://www.killerphp.com/tutorials/object-oriented-php/php-objects-page-3.php

首先他让你在类中创建一个 setter 和 getter 方法:

<?php

class person{
    var $name;      

    function set_name($new_name){
        $this->name=$new_name;
    }

    function get_name(){
        return $this->name;
    }
}

php?>

然后创建对象并回显结果:

<?php 
    $stefan = new person();
    $jimmy  = new person();

    $stefan ->set_name("Stefan Mischook");
    $jimmy  ->set_name("Nick Waddles");

    echo "The first Object name is: ".$stefan->get_name();
    echo "The second Object name is: ".$jimmy->get_name();

?>

按预期工作,我明白了。

然后他介绍了构造器:

class person{
    var $name;

    function __construct($persons_name) {       
        $this->name = $persons_name;        
    }       

    function set_name($new_name){
        $this->name=$new_name;
    }

    function get_name(){
        return $this->name;
    }
}

然后像这样返回:

<?php 

    $joel   = new person("Joel");

    echo "The third Object name is: ".$joel->get_name();
?>

这一切都很好并且很有意义。

然后我尝试将两者结合起来并得到一个错误,所以我很好奇——构造函数总是代替“get”函数吗?如果你有一个构造函数,你是否总是需要在创建对象时包含一个参数?

给出错误:

<?php 
    $stefan = new person();
    $jimmy  = new person();
    $joel   = new person("Joel Laviolette");
    $stefan ->set_name("Stefan Mischook");
    $jimmy  ->set_name("Nick Waddles");

    echo "The first Object name is: ".$stefan->get_name();
    echo "The second Object name is: ".$jimmy->get_name();
    echo "The third Object name is: ".$joel->get_name();
?>

最佳答案

它给你错误,因为构造函数有必需的参数。要使参数可选,请像这样给它一个默认值

function __construct($persons_name=null) {
    if ($persons_name) {
        $this->set_name($persons_name);//use the setter in the constructor.
    }      
}

现在可以了

$stefan = new person();
$stefan ->set_name("Stefan Mischook");
$joel   = new person("Joel Laviolette");
echo "The first Object name is: ".$stefan->get_name();
echo "The second Object name is: ".$joel->get_name();

关于php - 开始 oop php 问题 : do constructors take the place of getter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2838667/

相关文章:

c++ - 为什么这些类不完整?

java - 在继承中,基类构造函数调用虚方法,为什么类是派生类并调用派生方法?

java - 如何从匿名内部类调用特定的父构造函数?

php - 如何在 PHP 中将日期转换为美国格式?

c++ - 具体类和抽象类有什么区别?

c++ - 何时/为什么在类里面将函数设为私有(private)?

c++ - 如何初始化需要执行计算的 const 成员?

php - 将值从 View 传递和隐藏到 Controller - Codeigniter

php - 如何从多个索引查询中获取 [id] 索引

php - 双重编码php多维数组发送到javascript