zoukankan      html  css  js  c++  java
  • 深入php面向对象和模式

    前两章是php历史和概论,略过。

    第三章 对象基础

    3.1 类和对象

    类,是用于生成对象的代码模版。

    public 公有的,都可调用。
    
    protected 保护的, 只有本类和子类可以调用。
    
    private 私有的, 只有本类可以调用,子类也不能。
    使用->来调用类的属性和方法: $product->title 
    构造方法:__construct()  会被自动调用。
    继承: extends
    
    子类继承父类会在实例化的时候自动调用所有public 和 protected方法。
    要引用一个类而不是对象的方法,可以使用::而不是->, 所以 parent::__construct()
    静态方法: static 以类作为作用域的函数。 
    class StaticExample {
      static public $num=0;
      static public function sayHello() {
            print "hello";
      }
    }
    
    print StaticExample::$num;
    StaticExample::sayHello();
    
    要从当前类(不是子类)中访问静态方法或属性,可以使用self关键字
    self::$num;
    
    根据定义, 我们不能在对象中调用静态方法, 因此静态方法和属性又被称为类变量和属性。因此不能在静态方法中使用伪变量$this
    常量属性: const     一般只能用大写字母来命名常量
    const AVAILABLE = 0;
    
    像静态属性一样, 只能通过类而不能通过类的实例访问常量属性。
    抽象类: abstract 
    抽象类不能直接被实例化,抽象类中只定义(或部分定义)子类需要的方法。子类可以继承它并且通过实现其中的抽象方法,使抽象类具体化。
    abstract public function write();
    抽象类的每个子类都必须实现抽象类中的所有抽象方法。
    接口: interface 接口职能定义功能,而不包含实现的内容。
    interface Chargeable {
      public function getPrice();
    }
    任何实现接口的类都要实现接口中所定义的所有方法。
    抛出异常: 使用throw 和 Exception对象来抛出异常,这会停止执行当前方法。
    if($i=0){
      throw new Exception('this is a error message');
    }
    
    或
    try{
    ...
    } catch (Exception $e) {
    ...
    }
    析构方法: 在对象被垃圾收集器收集前(即对象从内存中删除之前)自动调用。
    __destruct()
    __clone()复制对象
    
    class CopyMe {}
    $first = new CopyMe();
    $second = $first;
    //php4: $second和$first是两个完全不同的对象。
    //php5: $second和$first指向同一个对象。
    
    php中对象的赋值和传递都是通过引用进行的。

    回调 

    一个简单的回调案例

      function f1($arg1, $arg2)
      {
    	echo __FUNCTION__.'exec, the args is:'.$arg1.' '.$arg2;
    	echo "<br>";
      }
      call_user_func('f1', 'han', 'wen');
      call_user_func_array('f1', array('f1', array('han', 'wen')));
    

    目前在我看来回调函数就是通过函数call_user_func和call_user_func_array来指定函数名和参数来调用函数,具体用途还不太清楚。

    匿名函数和闭包Closure

    $func = function() {
        
    }; //带结束符
    

      

    $func = function( $param ) {
        echo $param;
    };
    
    $func( 'some string' );
    
    //输出:
    //some string
    

     这篇文章不错http://www.cnblogs.com/melonblog/archive/2013/05/01/3052611.html

     顺便发现一个强大函数preg_replace_callback  

     对象与设计

    内聚: 是一个模块内部各成分之间相关联程度的度量。

    耦合:紧密相连,依赖太重

  • 相关阅读:
    《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅶ(延伸:堆排序的实现)
    《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅵ
    《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅴ
    Uva227.Puzzle
    UVa1587.Digit Counting
    《Two Days DIV + CSS》读书笔记——CSS选择器
    《Two Days DIV + CSS》读书笔记——CSS控制页面方式
    《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅳ
    《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅲ
    校赛总结
  • 原文地址:https://www.cnblogs.com/derrck/p/4439027.html
Copyright © 2011-2022 走看看