PHP类逻辑、OOP、验证每个类中的API?
好的,伙计们,我需要一些基础知识的帮助。我正在创建一个引用API的类,我有几个基本问题。我需要API首先连接和验证,然后我需要它提供响应的每个部分。这是我的逻辑PHP类逻辑、OOP、验证每个类中的API?,php,oop,Php,Oop,好的,伙计们,我需要一些基础知识的帮助。我正在创建一个引用API的类,我有几个基本问题。我需要API首先连接和验证,然后我需要它提供响应的每个部分。这是我的逻辑 Class getBalance(){ function validate(){ Do validation... } function getAmount(){ var amount = obeject->amount; return amount; } function getDate(
Class getBalance(){
function validate(){
Do validation...
}
function getAmount(){
var amount = obeject->amount;
return amount;
}
function getDate(){
var amount = obeject->date;
return date;
}
function getCount(){
var amount = obeject->count;
return count;
}
}
好的,我的第一个问题是。。。验证应该在构造函数中处理吗?它不需要每次调用都运行,我只需要点击一次API。将它放入构造函数不会导致它在每次调用getBalance::getAmount()、getBalance::getDate()等时调用api吗?或者验证应该完全分开?或者我应该从验证中返回对象,然后每次都将其传递回类吗?对不起,我知道这是基本的,只是寻找最佳实践!谢谢。首先,您引用的代码是无效的PHP语法(我们称之为伪代码) 如果您在构造函数中执行验证,则仅在第一次执行验证时才会调用它
$instance = new getBalance;
然后调用$instance->getAmount()代码>$instance->getDate()代码>等,它将不会被再次调用
在不了解您的问题的情况下,我实际上会从构造中调用验证,如下所示:
public function __construct(){
$this->validate();
}
如果这不适用于您,请详细说明。当用户请求网站的“仅登录用户”部分时,将其视为验证登录用户。也就是说,每次发出新请求时都会验证用户-大多数站点都是通过会话进行验证的,因此它发生在幕后,用户实际上并不知道(除非他们知道得更好:D)-您基本上需要对API调用执行相同的操作,即每个需要有效用户的API请求都需要进行用户验证
将它放在构造函数中可能不是最好的选择,如果没有其他原因,Balance
类不应该担心验证-您应该创建一个validation
类,并在需要时静态调用它(当然,一旦验证,您可以在单个请求期间存储该状态并保持验证为true).最佳实践是尽可能地解耦。关于建设者,有两种学派:
- 构造函数只能用于初始化(两阶段构造)
- 施工人员可以“工作”(一期施工)
第二种方法在某些情况下更方便,甚至更合理,但第一种方法使您的框架更易于测试,这一点非常重要
您还可以执行某种延迟初始化(无论是否调用构造函数),其中验证在需要时运行一次,但在其他情况下不运行。这增加了代码的冗长性,但可能更有效:
private $validated = false;
public function getAmount() {
if (!$this->validated) {
$this->validate();
}
return $this->amount;
}
public function validate() {
$this->validated = true;
}
我想用一个定制的setter和getter。。可以在设置之前验证所有值
样品
class Balance{
private $amount ;
private $date ;
private $count = 0 ;
function __construct ($amount , $date)
{
$this->setAmount($amount);
$this->setDate($date);
// Do somthign to count
$this->count++;
}
function getAmount()
{
return $this->amount ;
}
function getDate()
{
return $this->date ;
}
function setAmount ($amount)
{
//validate Amount
$this->amount = $amount ;
}
function setDate($date)
{
//validate date
$this->date = $date ;
}
function getCount()
{
return $this->count ;
}
}
$balance = new Balance(2500,date("Y-n-d",time()));
echo $balance->getAmount() , " " , $balance->getDate();
我希望这有帮助
谢谢
:)这是我的解决方案(我不是说这是最好的):
一些评论:
我保留了一个变量isValid
,它告诉我对象是否在构造过程中通过了验证(在构造函数中验证也是如此)
返回前的每个方法检查IsHealthor是否为true或false,如果你想要
如果答案帮助你,请考虑接受它和/或投票。
Class getBalance(){
private $isValid = false;
public __construct() {
//do validation
if validation pass
$this->isValid = true;
else
$this->isValid = false;
}
function getAmount(){
if($isValid) {
var amount = obeject->amount;
return amount;
}
else
return "object not valid";
}
function getDate(){
var amount = obeject->date;
return date;
}
function getCount(){
var amount = obeject->count;
return count;
}
}