《深刻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等。php

4.文档块注释

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

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

经常使用标签:git

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

一个简单的例子:github

<?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';
    }
?>

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

6.采用OOP更容易维护

只要运用得当,OOP天生具备简洁紧凑的特色,与面向过程的代码相比,面向对象的代码定位和修改起来都很是容易。学习

若是某个信息数组增长了一个新的属性,面向过程代码可能须要修改每一个使用这个数组的函数(在最坏的状况下),以便增长这个属性。this

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

The END

相关文章
相关标签/搜索