好的,我需要一些基础帮助。我正在创建一个引用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吗?或者验证应该完全分开?或者我应该从验证中返回该对象,然后每次将其传递给该类?对不起我知道这是基本的,只是寻找最佳实践!感谢。
答案 0 :(得分:1)
当用户请求网站的“仅登录用户”部分时,将其视为验证登录用户。也就是说,每次发出新请求时都会验证用户 - 大多数网站通过会话执行此操作,因此它在幕后发生而没有用户实际知道(除非他们知道更好:D) - 您基本上需要对调用API,即每个需要有效用户的API请求都需要进行用户验证。
将它置于构造函数中可能不是最好的选择,如果没有别的,Balance
类不应该担心验证 - 你应该创建一个Validation
类并在需要时静态调用它(当然,一旦您确认,您可以存储该状态并在单个请求期间保持验证真实。)
答案 1 :(得分:1)
最佳做法是尽可能地分离。建设者有两种思想流派:
第二种方法在某些情况下更方便,更明智,但第一种方法使您的框架更容易测试,这非常重要。
您还可以执行某种延迟初始化(使用或不使用构造函数中的调用),其中验证在需要时运行一次,但不是。这增加了代码的详细程度,但它可能更有效:
private $validated = false;
public function getAmount() {
if (!$this->validated) {
$this->validate();
}
return $this->amount;
}
public function validate() {
$this->validated = true;
}
答案 2 :(得分:0)
首先,引用中的代码是无效的PHP语法(让我们称之为伪代码)。
如果在构造函数中进行验证,则仅在第一次执行时调用
$instance = new getBalance;
然后,如果您致电$instance->getAmount();
$instance->getDate();
等,则不会再次致电。
在不了解您的问题的情况下,我实际上会从构造中调用验证,如:
public function __construct(){
$this->validate();
}
如果这对您不起作用,请详细说明。
答案 3 :(得分:0)
我认为使用自定义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();
我希望这会有所帮助
谢谢
:)
答案 4 :(得分:0)
这是我的解决方案(我不是说这是最好的解决方案):
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;
}
}
一些评论:
我保留一个变量isValid
,告诉我对象是否在构造期间通过验证(所以在构造函数中确认)
返回前的每个方法检查isValid是true还是false如果你想要