gpt4 book ai didi

php - 返回对象(PHP 最佳实践)

转载 作者:行者123 更新时间:2023-12-05 07:49:19 25 4
gpt4 key购买 nike

在编写 PHP OOP 代码时,为各种类使用“返回对象”以便将成功、失败、错误消息等向上传递到食物链是否是一种好的/可接受的/明智的做法?

我现在拥有的示例:

“返回对象”:

class JsqlReturn{
public $response;
public $success;
public $debug_message;
public $mysqli_result_obj;
function __construct($bool=false,$debug_message=NULL,$res=NULL,$mysqli_result_obj=NULL){
$this->success = $bool;
$this->response = $res;
$this->debug_message = $debug_message;
$this->mysqli_result_obj = $mysqli_result_obj;
}
}

带有示例方法的主类:

class Jsql{

function connect($host,$username,$password,$database){ #protected?
$this->db = new \mysqli($host,$username,$password,$database);
if($this->db->connect_errno){
return new JsqlReturn(false,"Connection failed: (".$this->db->connect_errno.") ".$this->db->connect_error);
}
else{
return new JsqlReturn(true,NULL,"Connection success.");
}
}

}

实现:

$db = new Jsql;
$return = $db->connect(...);
if($return->success){ echo $return->response; }
else{ echo $return->debug_message; }

我知道在这里使用连接示例很简单,但我的问题与编码实践有关。

我在这个实践中的主要目标是确保我在处理方法返回数据的方式上保持一致。

备注:手下留情。这是我在这里的第一个问题。 :) 我一直在慢慢自学,从几年前涉足 html 到转向过程 php,最后进入 OOP。

最佳答案

这对我来说似乎是一个非常合理的方法。

处理方法返回数据的方式保持一致而言,您可以让响应类实现响应接口(interface),然后您就会知道所有类型的响应类将遵守相同的规则,因此您可以在整个应用程序中安全地使用它:

interface MyResponseInterface
{
public function getResponse();
public function getDebugMessage();
public function getSuccess();
public function getMysqliConnection();
}

class JsqlResponse implements MyResponseInterface
{
// ...
}

然后你知道无论何时你的对象返回一个JsqlResponse、一个TimeResponse、一个MemberResponse等,它们都将实现你的响应接口(interface),因此您的公共(public) setter/getter 将可用,例如:

/** @var MyResponseInterface $return */
$return = $db->connect(...);
if($return->getSuccess()) {
echo $return->getResponse();
} else {
echo $return->getDebugMessage();
}

注意:在我的示例中,您可以返回不同类型的响应,我想(假设地)Time 和 Member 可能不需要 MySQL 连接,所以也许您可以从MyResponseInterface 并为数据库连接创建一个新接口(interface),例如我的数据库接口(interface)。通用响应类将提供响应、调试消息和成功方法。

关于php - 返回对象(PHP 最佳实践),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37425356/

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