PHP类逻辑、OOP、验证每个类中的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(

好的,伙计们,我需要一些基础知识的帮助。我正在创建一个引用API的类,我有几个基本问题。我需要API首先连接和验证,然后我需要它提供响应的每个部分。这是我的逻辑

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;
    }
}