php construct 返回值,php – 在类__construct()中间返回是否可以接受

我知道有很多问题与此有关.但是,我没有设法找到简单问题的答案(我不是要求从构造函数返回值,我认为我理解构造函数应该返回).

有没有理由避免在__construct中使用return?

或者这是完全可以接受的编码风格,由于返回,将来不会破坏:

class A {

protected $tristate = null;

function __construct() {

// Constructor returns instance of class automatically

// no need to `return $this`

}

protected function Logic() {

return rand(0, 1) === 1;

}

}

class B extends A {

function __construct() {

parent::__construct();

if ($this->Logic()) return;

$this->tristate = true;

}

}

上面的一个是经过测试的,它按预期工作(在我的开发环境中),它将父$tristate var 50/50设置为NULL / TRUE,但是它将来会工作,并且当在构造函数的中间返回时会出现任何问题无效回归.

我想到的另一件事是我应该使用return $this而不是普通返回的普通返回但是PHP似乎无论如何返回实例,回答可能是返回$this和普通返回同样好.

解决方法:

Constructor

void __construct ([ mixed $args [, $… ]] )

void as a return type means that the return value is useless.

所以你可以归还任何东西……但它没用.在您的情况下,返回适用于退出函数执行:它只是允许.

另一个问题是,这是一个好的或坏的做法……

我觉得简单回归;保存一些IF语句和恼人的缩进是一个很好的做法.

带有值的返回(即返回false;),如果它没用,则是一种不好的做法,因为没有意义.

标签:php,oop,constructor

来源: https://codeday.me/bug/20190901/1785084.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP 中,`__construct` 是一个特殊的魔术方法,用于在创建的新实例时进行初始化操作。如果你想绕过 `__construct` 方法,可以尝试以下方法之一: 1. 使用反射:使用反射可以绕过构造函数并创建的实例。下面是一个示例代码: ```php class MyClass { private $property; public function __construct($value) { $this->property = $value; } public function getProperty() { return $this->property; } } $reflection = new ReflectionClass('MyClass'); $instance = $reflection->newInstanceWithoutConstructor(); // 绕过构造函数创建实例 $instance->property = 'new value'; // 设置属性值 echo $instance->getProperty(); // 输出属性值 ``` 2. 使用 `unserialize` 函数:如果你有一个序列化的实例,并且想绕过构造函数来还原对象,可以使用 `unserialize` 函数。下面是一个示例代码: ```php class MyClass { private $property; public function __construct($value) { $this->property = $value; } public function getProperty() { return $this->property; } } $serializedObject = 'O:7:"MyClass":1:{s:8:"property";s:9:"old value";}'; // 序列化的对象 $instance = unserialize($serializedObject, ['allowed_classes' => true]); // 绕过构造函数还原对象 $instance->property = 'new value'; // 设置属性值 echo $instance->getProperty(); // 输出属性值 ``` 请注意,绕过构造函数可能会导致对象状态不一致或出现未定义的行为。在绕过构造函数时,要确保你了解所创建的对象的要求和预期行为,并相应地进行设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值