《深入PHP与jQuery开发》读书笔记——Chapter3

《深入PHP与jQuery开发》第三章学习笔记

1.PHP的魔术方法(在对象中发生某些例行事件时会自动调用这些方法)

  • PHP提供了魔术方法__construct()(构造函数),在新对象被创建时会被自动调用;
  • 要在对象被销毁时自动调用一个函数,可以使用__destruct()(析构函数)的魔术方法。在需要做类清理工作(例如,关闭数据库连接)时它就非常有用。
  • 要显式地触发析构行为,可以用unset()函数销毁这个对象。
  • 将类输出为字符串,要将MyClass类输出为一个字符串而不发生错误,需要定义另一个魔术方法__toString()。如果没有定义__toString()方法就输出对象会发生致命错误(程序停止运行)。在没有定义__toString()方法的情况下用echo指令输出对象:
<?php
	class MyClass {
		public $var = "MyClass";
		
		public function __construct() {
			echo 'The class "',__CLASS__,'" was initialized!<br/>';
		}
		
		public function __destruct() {
			echo 'The class "',__CLASS__,'" was destroyed!<br/>';
		}

		public function __toString() {
			echo "Using the toString method: ";
			return __CLASS__;
		}
	}

	$myclass = new MyClass;
	
	var_dump($myclass);  //直接打印类变量
	echo $myclass;   //调用__toString方法

	unset($myclass);

2.继承与派生

  • 2.1.要改变新类中继承来的属性或者方法,只需要在新类中重新声明这个属性或方法,就可以简单地覆盖掉它。
  • 2.2.如果是要覆盖时保留被覆盖方法的功能,只需要在保留原方法功能的基础上,要为继承得来的方法添加新功能,使用parent关键字加上作用域解析符(:😃。

3.属性或方法的可见度

  • 3.1.公开的属性和方法public
  • 3.2.受保护的属性和方法protected。若一个属性或方法被声明为受保护的protected,就只能在本类或者其后代(即继承了包含受保护方法的类的那些类)内部访问它。
  • 3.3.一个属性或方法若被声明为private,就只能在定义它的类内访问。这意味着,即便是子类,也不能访问该属性或方法。
  • 3.4.一个方法或属性若被声明是静态的,则不需要生成类的实例就可以访问它。只需要提供类的名字,加上作用域解析符和属性或方法的名字即可。使用静态属性的最大的好处是,在脚本的生命期内它们能记住自身储存的值。这意味着如果修改了一个静态属性,并稍后在脚本中访问它,修改后的值仍然在。

注意:在访问静态属性时,美元符号($)要放在作用域解析符(::)之后。如:self::$count,MyClass::plusone(),MyClass::$count等。

4.文档块注释

文档块使用块注释的开头再多加一个星号的方式定义:

/**
 * 这是一个最基本的文档块
 * /

常用标签:

  • @author
  • @copyright——当前元素的版权年份及版权方名字
  • @license——当前元素的授权文件链接
  • @var——变量或类属性的类型和描述
  • @param——函数或方法的返回值类型及其描述。
  • @return——函数或方法的返回值类型及其描述。

一个简单的例子:

<?php
/**
 *
 * 一个简单的类
 * @author Sysublackbear
 * @copyright 2014 SYSU
 * @license http://sysublackbear.github.io
 * /
 class SimpleClass {
	/**
	 * 一个公开变量
	 *
	 * @var string 保存类的数据
	 */
	public $foo;
	/**
	 * 在类实例化时给$foo赋一个新值
	 *
	 * @param string $var一个必须提供的值,供类初始化使用
	 * @return void
	 * /
	public function __construct($val) {
		$this->foo = $val;
	}

	/**
	 * 两个整数相乘
	 *
	 * 接受一对整数作为参数,返回它们的积
	 *
	 * @param int $bat一个数字
	 * @param int $baz一个数字
	 * @return int两个参数的积
	 * /
	public function bar($bat,$baz) {
		return $bat*$baz;
	}
}

?>

5.采用OOP对代码进行更好的组织

OOP的另一个好处是它非常便于代码打包和分类。每个类通常都放入一个单独的文件,如果采用统一的命令约定,访问一个类就极其简单。

假设你有一个程序有150个类,这些类由程序根目录下的一个控制文件动态调用。所有这150个类文件都遵守同样的命名约定:class.classname.inc.php,并且这些文件都被放在你应用程序的inc目录当中。

在这个控制文件中实现PHP的__autoload()函数,就能够在某个类实例化时动态载入这个类,而不必为了以防万一在控制文件中包含所有150个类,或者自己费心劳力地想别的办法来包含这些文件:

<?php
	function __autoload($class_name) {
		include_once('inc/class.'.$class_name.'.inc.php';
	}
?>

把每个类放到一个单独的文件,这样做非常有利于代码的移植,同时也使代码在新项目中重用更容易(无需大段复制粘贴代码)。

6.采用OOP更容易维护

只要运用得当,OOP天生具有简洁紧凑的特点,与面向过程的代码相比,面向对象的代码定位和修改起来都非常容易。

如果某个信息数组增加了一个新的属性,面向过程代码可能需要修改每个使用这个数组的函数(在最坏的情况下),以便增加这个属性。

而面向对象的应用程序只需要添加新的属性,再添加上处理这个属性的方法,就能轻松地完成更新。

The END#

posted @ 2014-11-15 13:30  中大黑熊  阅读(503)  评论(0编辑  收藏  举报