zoukankan      html  css  js  c++  java
  • PHP核心技术——面向对象

    类与对象:

    • 类的定义与实例化。
    //定义类
    class person{
        public $name;
        public $gender;
        public function say(){
            echo $this->name,"\tis ",$this->gender,"\r\n";
        }
    }
    
    class family{
        public $people;
        public $location;
        public function __construct($p,$loc)
        {
            $this->people=$p;
            $this->location=$loc;
        }
    
    }
    
    //实例化
    $student=new person();
    $student->name='Tom';
    $student->gender="male";
    $student->say();
    
    
    $teacher=new person();
    $teacher->name='Kate';
    $teacher->gender="female";
    $teacher->say();
    
    • 类定义了一系列的属性和方法,并提供了实际的操作细节,这些方法可以用来对属性进行加工。
    • 对象含有类属性的具体值,这就是类的实例化。正是由于属性的不同,才能区分不同的对象。在上面例子里,由于student和teacher的性别和姓名不一样,才得以区分开二人。
    • 对象由属性和方法组成
    • 由于PHP的对象是用数组来模拟的,因此我们把对象转为数组,就能看到这个对象所拥有的属性了。
    print_r((array)$student);
    var_dump($student);
    
    • 对象就是一堆数据。既然如此,可以把一个对象存储起来,以便需要时用。这就是对象的序列化。
    $str=serialize($student);
    echo $str;
    file_put_contents('store.txt', $str);
    $str=file_get_contents('store.txt');
    $student=unserialize($str);
    $student->say();
    
    • 对象序列化后,存储的只是对象的属性。类是由属性和方法组成的,而对象则是属性的集合,由同一个类生成的不同对象,拥有各自不同的属性,但共享了类的代码空间中方法区域的代码
    • 对象也是一种很普通的变量,不同的是其携带了对象的属性和类的入口。
    • 而对象和数组的区别在于:对象还有个指针,指向了它所属的类。在对student对象序列化时,我们看到了“person”这几个字符,这个标识符就标志了这个对象归属于person类,故在取出这个对象后,可以立即对其执行所包含的方法。
    $tom=new family($student,'peking');
    echo serialize($student);
    echo "-----------\n";
    $student_arr=array('name'=>'Tom','gender'=>'male');
    echo "-----------\n";
    echo serialize($student_arr);
    print_r($tom);
    echo "-----------\n";
    echo serialize($tom);
    
    • 类是定义一系列属性和操作的模板,而对象则把属性进行具体化,然后交给类处理。
    • 对象就是数据,对象本身不包含方法。但是对象有一个“指针”指向一个类,这个类里可以有方法。
    • 方法描述不同属性所导致的不同表现。
    • 类和对象是不可分割的,有对象就必定有一个类和其对应,否则这个对象也就成了没有亲人的孩子(但有一个特殊情况存在,就是由标量进行强制类型转换的object,没有一个类和它对应。此时,PHP中一个称为“孤儿”的stdClass类就会收留这个对象)。

    参考资料

    • [PHP核心技术与最佳实践]
  • 相关阅读:
    log4net封装类
    (转)MySQL InnoDB 架构
    备份宽带不足,innobackupex备份导致从库不可写
    从库查询阻塞xtrabackup备份,应该是kill备份还是kill查询的问题
    rabbitmq群集安装
    MySQL索引选择问题(要相信MySQL自己选择索引的能力)
    binlog_format产生的延迟问题
    命令行登录mysql报Segmentation fault故障解决
    MySQL5.7.21启动异常的修复
    大查询对mha切换的影响
  • 原文地址:https://www.cnblogs.com/geniusrun/p/10607653.html
Copyright © 2011-2022 走看看