快速业务通道

PHP V5迁移指南

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
" );
?>

这次改动并不大。只是移至 PHP V5 约定。下一步是添加对类的访问控制以确保类的使用者无法直接读写 PHP V5迁移指南 - 凌众科技

快速业务通道

PHP V5迁移指南

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
content

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号

items 成员变量。这次改动如下所示。

清单 3. access2.php5

<?php
class Configuration
{
 private PHP V5迁移指南 - 凌众科技

快速业务通道

PHP V5迁移指南

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
content

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号

items = array();
 public function __construct() {
  $this->_items[ ''imgpath'' ] = ''images'';
 }
 public function get( $key ) {
  return $this->_items[ $key ];
 }
}
$c = new Configuration();
echo( $c->get( ''imgpath'' )."\n" );
?>

如果这个对象的使用者都要直接访问项阵列,访问将被拒绝,因为该阵列被标记为 private。幸运的是,使用者发现 get() 方法可以提供广受欢迎的读取权限。

为了说明如何使用 protected 权限,我需要另一个类,该类必须继承自 Configuration 类。我把那个类称为 DBConfiguration,并假定该类将从数据库中读取配置值。此设置如下所示。

清单 4. access3.php

<?php
class Configuration
{
 protected PHP V5迁移指南 - 凌众科技

快速业务通道

PHP V5迁移指南

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
content

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号

items = array();
 public function __construct() {
  $this->load();
 }
 protected function load() { }
 public function get( $key ) {
  return $this->_items[ $key ];
 }
}
class DBConfiguration extends Configuration
{
 protected function load() {
  $this->_items[ ''imgpath'' ] = ''images'';
 }
}
$c = new DBConfiguration();
echo( $c->get( ''imgpath'' )."\n" );
?>

这张清单显示了 protected 关键字的正确用法。基类定义了名为 load() 的方法。此类的子类将覆盖 load() 方法把数据添加到 items 表中。load() 方法对类及其子类是内部方法,因此该方法对所有外部使用者都不可见。如果关键字都是 private 的,则 load() 方法不能被覆盖。

我并不十分喜欢此设计,但是,由于必须让 DBConfiguration 类能够访问项阵列而选用了此设计。我希望继续由 Configuration 类来完全维护项阵列,以便在添加其他子类后,那些类将不需要知道如何维护项阵列。我做了以下更改。

清单 5. access4.php5

<?php
class Configuration
{
 private PHP V5迁移指南 - 凌众科技

快速业务通道

PHP V5迁移指南

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
content

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号

items = array();
 public function __construct() {
  $this->load();
 }
 protected function load() { }
 protected function add( $key, $value ) {
  $this->_items[ $key ] = $value;
 }
 public function get( $key ) {
  return $this->_items[ $key ];
 }
}
class DBConfiguration extends Configuration
{
 protected function load() {
  $this->add( ''imgpath'', ''images'' );
 }
}
$c = new DBConfiguration();
echo( $c->get( ''imgpath'' )."\n" );
?>

现在,项阵列可以是 private 的,因为子类使用受保护的 add() 方法将配置项添加到列表中。Configuration 类可以更改存储和读取配置项的方法而不需要考虑它的子类。只要 load() 和 add() 方法以同样的方法运行,子类就应当不会出问题。

对于我来说,增加了访问控制是考虑移至 PHP V5 的主要原因。难道就因为 Grady Booch 说 PHP V5 是四大面向对象的语言之一么?不,因为我曾经接受了一个任务来维护 100KLOC C++ 代码,在这些代码中所有方法和成员都被定义为 public 的。我花了三天时间来清除这些定义,并在清除过程中,明显地减少了错误数并提高了可维护性。为什么?因为没有访问控制,就不可能知道对象怎样使用其他对象,也就不可能在不知道要突破什么难关的情况下做任何更改。使用 C++,至少我还有编译程序可用。PHP 没有配备编译程序,因此这类访问控制变得愈加重要。

契约编程

从 PHP V4 迁移到 PHP V5 时

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号