我想知道popo。我搜索了popo,发现它代表Plain Old Php Object。 但我不确定Plain Old Php Object的确切含义。 我想知道什么是popo以及在哪里使用它? 感谢。
答案 0 :(得分:12)
普通旧{在此处插入语言}对象是一种简单的方法,表示您始终不需要使用广泛的类或继承链来存储数据或执行逻辑。它允许您通过封装细节来简化对结构的理解,而不是导出细节或在其他源上创建依赖关系。
一个简单的用例可以是封装用户字段的DTO或实体:
class User {
public $firstName;
public $lastName;
}
与更广泛的对象实现接口或扩展Base类或两者。
interface UserInterface {
public function getName();
public function setName($name);
}
class User extends Model implements UserInterface {
public function getName()
{
...
}
public function setName($value) {
...
}
}
根据维基百科,如果命名类没有实现任何接口或扩展任何预先存在的类,则它被视为普通对象。
我建议查看Shaunak Sontakke对用例的回答。
答案 1 :(得分:2)
来自POJO
在软件工程中,普通的旧Java对象(POJO)是普通的 Java对象,不受任何特殊限制的约束,也不需要 任何阶级路径。
http://www.javaleaks.org/open-source/php/plain-old-php-object.html
答案 2 :(得分:2)
POPO是一个简单类的对象。当您将其作为stdClass对象时,并不意味着该对象具有严格的约定。 stdClass对象很容易被其他开发人员滥用。
制作POPO时,请考虑以下几点:
何时使用它:
在这些情况下,请考虑使用POPO:
POPO是POJO的PHP变体,由Martin Fowler创造
例如:
class CPerson {
private $m_strNameFirst;
private $m_strNameLast;
private $m_fltHeight;
private $m_fltWeight;
public function __construct( $arrmixValues ) {
$this->setNameFirst( $arrmixValues['name_first'] ?? NULL );
$this->setNameLast( $arrmixValues['name_last'] ?? NULL );
$this->setHeight( $arrmixValues['height'] ?? NULL );
$this->setWeight( $arrmixValues['weight'] ?? NULL );
}
public function toArray() : array {
return [
'name_first' => $this->getNameFirst(),
'name_last' => $this->getNameLast(),
'height' => $this->getHeight(),
'weight' => $this->getWeight(),
];
}
public function getNameFirst() {
return $this->m_strNameFirst;
}
public function setNameFirst( $strNameFirst ) {
$this->m_strNameFirst = $strNameFirst;
}
public function getNameLast() {
return $this->m_strNameLast;
}
public function setNameLast( $strNameLast ) {
$this->m_strNameLast = $strNameLast;
}
public function getHeight() {
return $this->m_fltHeight;
}
public function setHeight( $fltHeight ) {
$this->m_fltHeight = $fltHeight;
}
public function getWeight() {
return $this->m_fltWeight;
}
public function setWeight( $fltWeight ) {
$this->m_fltWeight = $fltWeight;
}
}