PHP类:定义默认返回对象
我有一个带有构造函数和一些方法的PHP类。每个方法都需要有相同的返回stdClass对象。stdClass对象的每个function中只有少数属性与默认属性不同(如属性PHP类:定义默认返回对象,php,class,return,Php,Class,Return,我有一个带有构造函数和一些方法的PHP类。每个方法都需要有相同的返回stdClass对象。stdClass对象的每个function中只有少数属性与默认属性不同(如属性值或状态)。你会怎么做?我的意思是,我可以在每个函数中定义一个具有所有属性的stdClass对象,但是正如我所说的,我只需要在每个函数中为返回更改几个属性 示例不起作用的代码: <? class Person{ public $sName; public $oReturn = new
值
或状态
)。你会怎么做?我的意思是,我可以在每个函数中定义一个具有所有属性的stdClass对象,但是正如我所说的,我只需要在每个函数中为返回更改几个属性
示例不起作用的代码:
<?
class Person{
public $sName;
public $oReturn = new stdClass();
$oReturn->status = 200;
$oReturn->value = "Personname";
function __construct($sName) {
$this->sName = $sName;
}
public function something($oData){
//Declaration
$this->oReturn->value = $oData->newName;
//Main
//Return
return $this->oReturn;
}
}
?>
您不能声明这样的属性:-
public $oReturn = new stdClass();
class Person{
public $sName;
public $oReturn;
function __construct($sName) {
$this->sName = $sName;
$this->oReturn = new stdClass;
$this->oReturn->status = 200;
$this->oReturn->value = "Personname";
}
public function something($oData){
//Declaration
$this->oReturn->value = $oData->newName;
//Main
//Return
return $this->oReturn;
}
}
这在PHP中是非法的。这样做:-
public $oReturn = new stdClass();
class Person{
public $sName;
public $oReturn;
function __construct($sName) {
$this->sName = $sName;
$this->oReturn = new stdClass;
$this->oReturn->status = 200;
$this->oReturn->value = "Personname";
}
public function something($oData){
//Declaration
$this->oReturn->value = $oData->newName;
//Main
//Return
return $this->oReturn;
}
}
现在,您可以在$this->oReturn
中设置您想要的任何属性,我认为这就是您想要实现的
您只需返回一个为您格式化数据的共享方法即可
<?php
class Foo
{
protected
$defaults = array(
'a' => 1,
'b' => 2,
);
protected function reply(array $params = null) {
$properties = $this->defaults;
if ($params) {
$properties = array_merge($properties, $params);
}
return (object) $properties;
}
public function a($a) {
return $this->reply(array('a' => $a));
}
public function b($b) {
return $this->reply(array('b' => $b));
}
}
$foo = new Foo;
var_dump($foo->a('a'));
var_dump($foo->b('b'));
/*
object(stdClass)#2 (2) {
["a"]=>
string(1) "a"
["b"]=>
int(2)
}
object(stdClass)#2 (2) {
["a"]=>
int(1)
["b"]=>
string(1) "b"
}
*/
我想你可能在寻找方法链接。您可以创建一个类,其方法返回$this
,然后您可以更改方法调用
考虑如下所示的类:
<?php
class User
{
protected $id;
protected $name;
protected $email;
public function setName($name)
{
$this->name = $name;
return $this;
}
public function setEmail($email)
{
$this->email = $email;
return $this;
}
}
您可以在类实例化后将非标量值分配给类属性(也称为新建后的)。请参见将$oReturn
值赋值移动到构造函数中
class Person{
public $sName;
public $oReturn;
protected $default_status = 200;
protected $default_value = "Personname";
function __construct($sName) {
$this->sName = $sName;
$this->oReturn = new stdClass();
$this->oReturn->status = $this->default_status;
$this->oReturn->value = $this->default_value;
}
public function something($oData){
//Declaration
$this->oReturn->value = $oData->newName;
//Main
//Return
return $this->oReturn;
}
}
现在,您可以扩展这个类,进行一些小的更改
class PersonNotFound extends Person {
protected $default_status = 404;
protected $default_value = 'NotFound';
}
让我们看看他们的结果:
$oData = new stdClass();
$oData->newName = 'Neo';
$person_a = new Person("Triniti");
var_dump( $person_a->something($oData) );
// status = 200
$person_b => new PersonNotFound("Cyon");
var_dump( $person_b->something($oData) );
// status = 404
编辑:
构造函数注入版本:
class Person{
public $sName;
public $oReturn;
function __construct($sName, $status = 200, $value = "Personname") {
$this->sName = $sName;
$this->oReturn = new stdClass();
$this->oReturn->status = $status;
$this->oReturn->value = $value;
}
public function something($oData){
$this->oReturn->value = $oData->newName;
return $this->oReturn;
}
}
$person_a = new Person("Neo"); // 200, Personname as default
$person_b = new Person("Triniti", 404, "NotFound");
类可以使用extends
关键字进行扩展。为什么不创建一个包含所有属性和所有类的父类extends
?。我不明白你的问题。。。看看我的最新问题。我想要这样的东西,但这不起作用。如您所见,我有一个默认的返回值。在函数something
中,我更改了默认值。这就是我想要的。我喜欢vascowhite的答案中的方法。在我的示例中,extenses类是不必要的吗?