什么是php中的简单示例封装?
答案 0 :(得分:36)
封装只是将一些数据包装在一个对象中。术语“封装”通常与“信息隐藏”互换使用。维基百科有a pretty through article。
以下是the first link中Google search for 'php encapsulation'的示例:
<?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();
?>
答案 1 :(得分:11)
封装是将代码及其操作的数据绑定在一起的机制,并保护它们免受外部干扰和误用。将数据和方法包装到单个单元(称为类)中称为封装。封装的好处在于它可以执行内部任务而不必担心。
答案 2 :(得分:10)
封装是您的类和数据结构的保护机制。它让您的生活更轻松。使用Encapsulation,您可以使用控件来访问和设置类参数和方法。您可以控制哪些部分对外人可见,以及如何设置对象参数。
访问和设置课程参数
(好方法)
openssl rsa -in src/test/resources/key.pem -pubout -outform DER -out src/test/resources/cert.der
openssl pkcs8 -topk8 -inform PEM -outform DER -in key.pem -nocrypt -out key.der
现在,您可以从User类创建对象,并可以安全地设置性别参数。如果您为类设置了任何错误,那么它将抛出异常。您可能认为这是不必要的,但是当您的代码增长时,您会希望看到有意义的异常消息,而不是系统中的尴尬逻辑问题,没有例外。
<?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;
}
}
(坏道)
如果您不遵循Encapsulation角色,那么您的代码将是这样的。很难维护。请注意,我们可以为用户性别属性设置任何内容。
$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';
我们都知道我们不应该用200行代码来创建一个函数,而应该将它分解为一些破坏代码并提高代码可读性的单独函数。现在使用封装,您可以将这些功能设置为私有,这意味着外部人员无法访问它们,以后当您想要修改某个功能时,当您看到私有关键字时,您会非常高兴。
(坏道)
<?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...)
{
...
}
}
答案 3 :(得分:7)
封装是一种将对象或数据作为属性存储在另一个对象中的方式,以便外部对象可以完全控制内部数据或对象的访问方式。
例如
class OuterClass
{
private var $innerobject;
function increment()
{
return $this->innerobject->increment();
}
}
在封装的对象周围有一个额外的层,允许外部对象控制如何访问内部对象。这与内部对象/属性private
结合使用,可以启用 information hiding 。
答案 4 :(得分:3)
人们似乎正在将面向对象的细节与封装相混淆,这是一个更古老,更广泛的概念。封装的数据结构
您几乎可以使用任何语言进行封装,并且在模块化和可维护性方面可以获得巨大的好处。
答案 5 :(得分:3)
/* class that covers all ATM related operations */
class ATM {
private $customerId;
private $atmPinNumber;
private $amount;
// Varify ATM card user
public function verifyCustomer($customerId, $atmPinNumber) {
... function body ...
}
// Withdraw Cash function
public function withdrawCash($amount) {
... function body ...
}
// Retrive mini statement of our account
public function miniStatement() {
... function body ...
}
}
在上面的例子中,我们已经使用私有访问修饰符声明了所有ATM类属性(变量)。它只是意味着外部世界最终用户无法直接访问ATM类属性。因此,外部世界最终用户无法直接更改或更新类属性。
更改类属性(数据)的唯一可能方法是方法(函数)。这就是我们用公共访问修饰符声明ATM类方法的原因。用户可以将所需的参数传递给类方法以执行特定操作。
这意味着用户没有ATM类的完整实现细节。它简称为数据隐藏。
参考: http://www.thecreativedev.com/php-encapsulation-with-simple-example/
答案 6 :(得分:2)
与封装相反的是将变量传递给每个方法(如每个文件相关方法的文件句柄)或全局变量。
答案 7 :(得分:2)
封装是将对象的数据从外部世界隐藏的过程,对它的访问仅限于该类的成员。
答案 8 :(得分:2)
封装: - 以单个单位包装数据。我们也可以说隐藏重要细节的信息。 示例:你有一部手机....有一些界面可以帮助你与手机互动,你可以使用手机的服务。但实际上在手机上工作是隐藏的。你不知道它是如何在内部运作的。
答案 9 :(得分:2)
将数据成员和方法一起包装成单个单元(即Class)称为 Encapsulation 。 封装就像封装在一个胶囊中。这是将与对象相关的相关操作和数据包含在该对象中。 封装就像你的包,你可以保存你的笔,书等。这意味着这是封装成员和功能的属性。
<?php
class YourMarks
{
private $mark;
public Marks
{
get { return $mark; }
set { if ($mark > 0) $mark = 10; else $mark = 0; }
}
}
?>
我正在提供另一个现实生活的例子(日常使用),即“电视操作”。许多人在日常生活中经营电视。
它采用封面封装,可以远程操作,无需打开电视和更换频道。 除了遥控器外,所有东西都是私密的,所以任何人都可以访问不操作和改变电视中的东西。
答案 10 :(得分:1)
我只是希望能看到你班级的财产和方法。例如- - 上市 - 私人的 - 受保护
让我们来看看封装的真实例子。
class MyClass{
private $name;
public function showName($newName){
$this->name = $newName;
return $this->name;
}
}
//instantiate object
$obj = new MyClass();
echo $obj->showName("tisuchi");
在这种情况下,封装意味着我们限制了一些属性。就像名称属性一样,我们无法从类外部访问。另一方面,我们可以使用一个私有参数访问名为showName()的公共函数。
我更喜欢封装的是 -
虽然,如果您有任何意图进一步理解封装,我会参考基于封装的特殊教程。
http://tisuchi.com/object-oriented-php-part-3-encapsulation-php/
希望,它会使您的概念更加清晰。玩得开心!
答案 11 :(得分:0)
从基本的角度来说,这是我们定义属性和方法可见性的方式。当您创建类时,您必须问自己在类之外可以访问哪些属性和方法。假设我们有一个名为foo的属性。如果一个类扩展了你的类,是否允许操作和访问foo?如果有人创建了您的课程实例怎么办?他们被允许操纵和访问foo吗?
答案 12 :(得分:0)
封装就是您希望在应用程序中显示对象/方法或属性/变量的方式。 例如, :
class ecap {
public $name;
private $id;
protected $tax;
}
如果要访问私有或受保护的属性,则必须在类中使用可从类外部访问的getter和setter方法。这意味着,您无法直接从类外部访问私有或受保护的属性,但您可以通过任何方法使用。我们来看看 -
在课堂上,添加以下方法:
class ecap
{
public function userId(){
return $this->id;
}
}
我们可以像访问它一样访问它:
$obj = new ecap();
echo $obj->userId();
答案 13 :(得分:0)
在单个单元内包装数据称为封装。意味着类成员(例如方法和属性)在类内部绑定在一起以避免外部访问,这是通过将类的变量和函数设为私有来实现的。