gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:44:14 26 4
gpt4 key购买 nike

我正在完成本教程: 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com