什么是 php 中简单示例的封装?
2022-08-30 12:02:01
什么是 php 中简单示例的封装?
封装只是在对象中包装一些数据。术语“封装”通常与“信息隐藏”互换使用。维基百科有一篇非常详尽的文章。
以下是Google搜索“php封装”的第一个链接的示例:
<?php
class App {
private static $_user;
public function User( ) {
if( $this->_user == null ) {
$this->_user = new User();
}
return $this->_user;
}
}
class User {
private $_name;
public function __construct() {
$this->_name = "Joseph Crawford Jr.";
}
public function GetName() {
return $this->_name;
}
}
$app = new App();
echo $app->User()->GetName();
?>
封装是类和数据结构的保护机制。它让你的生活更轻松。使用封装,您可以控制访问和设置类参数和方法。您有一个控件来说明哪个部分对外部人员可见,以及如何设置对象参数。
访问和设置类参数
(好方法)
<?php
class User
{
private $gender;
public function getGender()
{
return $this->gender;
}
public function setGender($gender)
{
if ('male' !== $gender and 'female' !== $gender) {
throw new \Exception('Set male or female for gender');
}
$this->gender = $gender;
}
}
现在,您可以从 User 类创建对象,并且可以安全地设置性别参数。如果你为你的类设置了任何错误,那么它将引发和异常。您可能认为这是不必要的,但是当您的代码增长时,您会希望看到有意义的异常消息,而不是系统中毫无例外的尴尬逻辑问题。
$user = new User();
$user->setGender('male');
// An exception will throw and you can not set 'Y' to user gender
$user->setGender('Y');
(糟糕的方式)
如果您不遵循封装角色,那么您的代码将如下所示。很难维护。请注意,我们可以将任何内容设置为用户性别属性。
<?php
class User
{
public $gender;
}
$user = new User();
$user->gender = 'male';
// No exception will throw and you can set 'Y' to user gender however
// eventually you will face some logical issue in your system that is
// very hard to detect
$user->gender = 'Y';
访问类方法
(好方法)
<?php
class User
{
public function doSomethingComplex()
{
$this->doThis(...);
...
$this->doThat(...);
...
$this->doThisExtra(...);
}
private function doThis(...some Parameters...)
{
...
}
private function doThat(...some Parameters...)
{
...
}
private function doThisExtra(...some Parameters...)
{
...
}
}
我们都知道,我们不应该用200行代码制作一个函数,而应该把它分解成一些单独的函数,这些函数会破坏代码并提高代码的可读性。现在,通过封装,您可以将这些函数设为私有,这意味着外部人员无法访问它,稍后当您想要修改函数时,当您看到私有关键字时,您会非常高兴。
(糟糕的方式)
class User
{
public function doSomethingComplex()
{
// do everything here
...
...
...
...
}
}