搜尋
首頁php教程php手册第九节 绑定 [9]
第九节 绑定 [9]Jun 13, 2016 pm 12:46 PM
關聯函數哪個屬性方式方法綁定訪問呼叫限制


除了限制访问,访问方式也决定哪个方法将被子类调用或哪个属性将被子类访问. 函数调用与函数本身的关联,以及成员访问与变量内存地址间的关系,称为绑定.

在计算机语言中有两种主要的绑定方式—静态绑定和动态绑定. 静态绑定发生于数据结构和数据结构间,程序执行之前. 静态绑定发生于编译期, 因此不能利用任何运行期的信息. 它针对函数调用与函数的主体,或变量与内存中的区块. 因为PHP是一种动态语言,它不使用静态绑定. 但是可以模拟静态绑定.

动态绑定则针对运行期产生的访问请求,只用到运行期的可用信息. 在面向对象的代码中,动态绑定意味着决定哪个方法被调用或哪个属性被访问,将基于这个类本身而不基于访问范围.

Public和protected成员的动作类似于PHP的前几个版本中函数的动作,使用动态绑定. 这意味着如果一个方法访问一个在子类中被覆写的类成员,并是一个子类的实例,子类的成员将被访问(而不是访问父类中的成员).

看例子6.10. 这段代码输出” Hey! I am Son.” 因为当PHP调用getSalutation, 是一个Son的实例,是将Father中的salutation覆写而来. 如果salutation是public的,PHP将产生相同的结果. 覆写方法的操作很类似.在Son中,对于identify的调用绑定到那个方法.

即使在子类中访问方式被从protected削弱成public, 动态绑定仍然会发生. 按照访问方式使用的原则,增强对于类成员的访问限制是不可能的. 所以把访问方式从public改变成protected不可能进行.

Listing 6.10 Dynamic binding 动态绑定
class Father
{
protected $salutation = "Hello there!"; file://问候

public function getSalutation()
{
print("$this->salutationn");
$this->identify();
}

protected function identify()
{
print("I am Father.
n");
}
};

class Son extends Father
{
protected $salutation = "Hey!"; file://父类中的protected $salutation 被覆写

protected function identify() file://父类中的protected identify() 被覆写
{
print("I am Son.
n");
}
};

$obj = new Son();
$obj->getSalutation(); file://输出Hey! I am Son.
?> //注: 在子类中没有覆写getSalutation(),但实际上仍然存在一个getSalutation().这个类中的$salutation和identify()
//与Son子类的实例中的getSalutation()方法动态绑定,所以调用Son的实例的getSalutation()方法,
//将调用Son类中的成员salutation及identify(),而不是父类中的成员salutation及identify().

Private成员只存在于它们所在的类内部. 不像public和protected成员那样,PHP模拟静态绑定. 看例子6.11. 它输出”Hello there! I am Father.”,尽管子类覆写了salutation的值. 脚本将this->salutation和当前类Father绑定. 类似的原则应用于private方法identify().

Listing 6.11 Binding and private members
class Father
{
private $salutation = "Hello there!";

public function getSalutation()
{
print("$this->salutationn");
$this->identify();
}

private function identify()
{
print("I am Father.
n");
}
}

class Son extends Father
{
private $salutation = "Hey!";
private function identify()
{
print("I am Son.
n");
}
}

$obj = new Son();
$obj->getSalutation(); file://输出Hello there! I am Father.
?>动态绑定的好处是允许继承类来改变父类的行为,同时可以保持父类的接口和功能. 看例子6.12. 由于使用了动态绑定,在deleteUser中被调用的isAuthorized的version 可以由对象的类型来确定. 如果是一个普通的user,PHP调用User::isAuthorized会返回FALSE.如果是一个AuthorizedUser的实例,PHP调用AuthorizedUser::isAuthorized,将允许deleteUser顺利执行.

//haohappy注:用一句话说清楚,就是对象类型与方法,属性绑定. 调用一个父类与子类中都存在的方法或访问一个属性时,会先判断实例属于哪种对象类型,再调用相应的类中的方法和属性.

Listing 6.12 动态绑定的好处
class User file://用户
{
protected function isAuthorized() file://是否是验证用户
{
return(FALSE);
}

public function getName() file://获得名字
{
return($this->name);
}

public function deleteUser($username) file://删除用户
{
if(!$this->isAuthorized())
{
print("You are not authorized.
n");
return(FALSE);
}

//delete the user
print("User deleted.
n");
}
}

class AuthorizedUser extends User file://认证用户
{
protected function isAuthorized() file://覆写isAuthorized()
{
return(TRUE);
}
}

$user = new User;
$admin = new AuthorizedUser;

//not authorized
$user->deleteUser("Zeev");

//authorized
$admin->deleteUser("Zeev");
?> 为什么private的类成员模拟静态绑定? 为了回答这个问题, 你需要回忆一下为什么需要有private成员.什么时候用它们来代替protected成员是有意义的?

private成员只有当你不想让子类继承改变或特殊化父类的行为时才用到. 这种情况比你想像的要少. 通常来说,一个好的对象分层结构应当允许绝大多数功能被子类特殊化,改进,或改变—这是面向对象编程的基础之一. 一定的情况下需要private方法或变量,例如当你确信你不想允许子类改变父类中的某个特定的部份.

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
两个微信可以绑定同一张银行卡吗两个微信可以绑定同一张银行卡吗Aug 25, 2023 pm 03:13 PM

两个微信不可以绑定同一张银行卡。绑定银行卡到微信账户操作:1、打开微信应用程序,点击“我”选项,然后选择“支付”选项;2、选择“添加银行卡”选项,并按照系统提示输入银行卡信息;3、一旦银行卡绑定成功,用户就可以在微信中使用该银行卡进行支付和转账。

如何在Vue中实现可编辑的表格如何在Vue中实现可编辑的表格Nov 08, 2023 pm 12:51 PM

在许多Web应用程序中,表格是必不可少的一个组件。表格通常具有大量数据,因此表格需要一些特定的功能来提高用户体验。其中一个重要的功能是可编辑性。在本文中,我们将探讨如何使用Vue.js实现可编辑的表格,并提供具体的代码示例。步骤1:准备数据首先,我们需要为表格准备数据。我们可以使用JSON对象来存储表格的数据,并将其存储在Vue实例的data属性中。在本例中

BTCC教学:如何在BTCC交易所绑定使用MetaMask钱包?BTCC教学:如何在BTCC交易所绑定使用MetaMask钱包?Apr 26, 2024 am 09:40 AM

MetaMask(中文也叫小狐狸钱包)是一款免费的、广受好评的加密钱包软件。目前,BTCC已支持绑定MetaMask钱包,绑定后可使用MetaMask钱包进行快速登入,储值、买币等,且首次绑定还可获得20USDT体验金。在BTCCMetaMask钱包教学中,我们将详细介绍如何注册和使用MetaMask,以及如何在BTCC绑定并使用小狐狸钱包。MetaMask钱包是什么?MetaMask小狐狸钱包拥有超过3,000万用户,是当今最受欢迎的加密货币钱包之一。它可免费​​使用,可作为扩充功能安装在网络

小红书怎么绑定子账号?它怎么检测账号是否正常?小红书怎么绑定子账号?它怎么检测账号是否正常?Mar 21, 2024 pm 10:11 PM

在如今这个信息爆炸的时代,个人品牌和企业形象的建设变得越来越重要。小红书作为国内领先的时尚生活分享平台,吸引了大量用户关注和参与。对于那些希望扩大影响力、提高内容传播效率的用户来说,绑定子账号成为了一种有效的手段。那么,小红书怎么绑定子账号呢?又如何检测账号是否正常呢?本文将为您详细解答这些问题。一、小红书怎么绑定子账号?1.登录主账号:首先,您需要登录您的小红书主账号。2.打开设置菜单:点击右上角的“我”,然后选择“设置”。3.进入账号管理:在设置菜单中,找到“账号管理”或“账号助手”选项,点

今日头条中绑定抖音的步骤方法今日头条中绑定抖音的步骤方法Mar 22, 2024 pm 05:56 PM

1、打开今日头条。2、点击右下角我的。3、点击【系统设置】。4、点击【账号和隐私设置】。5、点击【抖音】右边的按钮即可绑定抖音。

菜鸟app怎么绑定拼多多 菜鸟裹裹怎么添加拼多多平台菜鸟app怎么绑定拼多多 菜鸟裹裹怎么添加拼多多平台Mar 19, 2024 pm 02:30 PM

  菜鸟app就是能够为你们提供出各种物流信息状况的平台,这里的功能非常的强大好用,大家有任何与物流相关的问题,都能在这得到解决的,反正都能为你们带来一站式的服务,全都能及时解决的,查快递,取快递,寄快递等,都是毫无任何问题,与各个的平台都进行了合作,全部的信息,都能查询得到的,但是有些时候会出现拼多多当中购买的商品,都是无法呈现出物流的信息,其实是需要大家进行手动绑定拼多多,才能实现的,具体的方法已经整理出来了在下方,大家都能来看看的。菜鸟绑定拼多多账户的方法:  1、打开菜鸟APP,在主页面

菜鸟APP怎么绑定拼多多 菜鸟APP绑定拼多多方法菜鸟APP怎么绑定拼多多 菜鸟APP绑定拼多多方法Mar 19, 2024 pm 05:16 PM

  你们知道在使用菜鸟裹裹的时候是怎么来绑定拼多多的吗?菜鸟裹裹App官方正版在这款平台上面对于一些拼多多的物流信息是没有自动同步上去的,我们需要做的就只能复制单号过来或者是查询你们的手机看看有无快递的信息。当然这些都是需要手动来完成的,如果你们也想了解更多的话,就和小编一起来看看吧。  菜鸟APP怎么绑定拼多多  1、打开菜鸟APP,在主页面点击左上角的“导包裹”。  2、在界面中,有很多购物网站,账号都可以绑定。  3、点击导入其他电商平台。  4、用户授权:点击拼多多转到界面

小米汽车app怎么绑定充电桩设备小米汽车app怎么绑定充电桩设备Apr 01, 2024 pm 06:52 PM

最新小米最新推出的小米su7型号汽车霸占了各种热搜榜,很多正好有购车需求的用户们都纷纷选择了小米su7型号的汽车进行购买,那么在提车以后如何利用自己的小米汽车app绑定家用充电桩进行充电呢,那么这篇教程攻略就将为大家带来详细的内容介绍,希望能帮助到大家。首先我们先打开小米手机app,点击右下角我的按钮然后在我的界面,可以看到家充桩的选项进入到绑定充电桩的页面以后,点击下方的去扫码按钮,扫描充电桩上的二维码即可完成充电桩与app的绑定

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中