php学习笔记之面向对象


Posted in PHP onNovember 08, 2014

public   公有的:本类,子类,外部对象都可以调用
protected 受保护的:本类 子类,可以执行,外部对象不可以调用
private 私有的:只能本类执行,子类与外部对象都不可调用
面向对象编程的三大特点

1)封闭性

封闭性,也可以称为信息隐藏。就是将一个类的使用和实现分开,只保留有限的接口(方法)与外部联系。对于用到该类的开发人员,只要知道这个类如何使用即可,而不用去关心这个类是如何实现的。这样做可以让开发人员更好地把精力集中起来专注别的事情,同时也避免了程序之间的相互依赖而带来的不便。

2)继承性

继承性就是派生类(子类)自动继承一个或多个基类(父类)中的属性与方法,并可以重写或添加新的属性和方法。继承这个特性简化了对象和类的创建,增加了代码的可重性。继承分单继承和多继承,PHP所支持的是单继承,也就是说,一个子类有且只有一个父类。

3)多态性

多态性是指同一个类的不同对象,使用同一个方法可以获得不同的结果,这种技术称为多态性。多态性增强了软件的灵活性和重用性。

类的定义

一个类可以包含有属于自己的常量,变量(称为“属性”)以及函数(称为“方法”)。
和很多面向对象的语言一样,PHP也是通过class关键字加类名来定义类的。类的格式如下:

<?php

  Class myobject{

    //……

}

?>

定义:物以类聚,把具有相似特性的对象归到一个类中,类定义了这些相似对象拥有的相同属性和方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。

类的对象称为类的一个实例。要创建一个类的实例,必须使用 new 关键字。
001ZpQGYty6MeYnSNUh25&690

<?php

//类的定义以关键字class开始,类的命名通常以每个单词第一个字母大写

    class NbaPlayer{

        public $name = "Jordan"; //定义属性

        public $height = "198cm";

        public $team = "Bull";

        public $playerNumber = "23";
        //定义方法

    public function run(){

        echo "Running\n";

    }

    public function dribblr(){

        echo "Dribbling\n";

    }

    public function pass(){

        echo "Passing\n";

    }

}

    //类到对象的实例化

    //类的实例化为对象时使用关键字new,new之后紧跟类的名称和一对括号

    $jordan = new NbaPlayer(); 
    //对象中的属性成员可以通过"->"符号来访问

    echo $jordan->name."\n";
    //对象中的成员方法可以通过"->"符号来访问

    $jordan->dribble();

    $jordan->run();

?>

成员方法

类中的函数被称为成员方法。函数和成员方法唯一的区别就是,函数实现的是某个独立的功能,而成员方法是实现类中的一个行为,是类的一部分。
下面就来扩充上面的myobject类,为它添加一个成员方法,代码如下:

<?php

classmyobject{

   function getobjectname($name){

      echo "商品名称为:".$name;

   }

}

?>

该方法的作用是输出商品名称,商品名称是通过方法的参数传进来的。
类是一个抽象的描述,是功能相似的一组对象的集合。如果想用到类中的方法和变量,首先就要把它具体落实到一个实体,也就是对象上。

类常量
既然有变量,当然也会有常量了。常量就是不会改变的量,是一个恒值。众所周知的一个常量就是圆周率Pi。定义常量使用关键字const如:
ConstPI=3.14159;

构造函数

PHP 5 允行开发者在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。

<?php

//类的定义以关键字class开始,类的命名通常以每个单词第一个字母大写

    class NbaPlayer{

        public $name = "Jordan"; //定义属性

        public $height = "198cm";

        public $team = "Bull";

        public $playerNumber = "23";
        //构造函数,在对象被实例化的时候自动调用

        function __construct($name,$height,$weight,$team){

            echo "It is an  NbaPlayer constructor\n";

            $this->name = $name;

            //$this是PHP里面的伪变量,表示对象自身。可以通过$this->的方式访问对象的属性和方法

            $this->height = $height;

            $this->weight = $weight;

            $this->team = $team;

        }
        //定义方法

    public function run(){

        echo "Running\n";

    }

    public function dribblr(){

        echo "Dribbling\n";

    }

    public function pass(){

        echo "Passing\n";

    }

}

    //类到对象的实例化

    //类的实例化为对象时使用关键字new,new之后紧跟类的名称和一对括号

    $jordan = new NbaPlayer("Jordan","198cm","98kg","Bull");   
    //对象中的属性成员可以通过"->"符号来访问

    echo $jordan->name."\n";
    //对象中的成员方法可以通过"->"符号来访问

    $jordan->dribble();

    $jordan->run();
    //每一次用new实例化对象的时候,都会用类名后面的参数列表调用构造函数

    $james = new NbaPlayer("James","203cm","120kg","Heat")

    echo $james->name."\n";

?>

析构函数

<?php

//类的定义以关键字class开始,类的命名通常以每个单词第一个字母大写

    class NbaPlayer{

        public $name = "Jordan"; //定义属性

        public $height = "198cm";

        public $team = "Bull";

        public $playerNumber = "23";

        

        //构造函数,在对象被实例化的时候自动调用

        function __construct($name,$height,$weight,$team){

            echo "It is an  NbaPlayer constructor\n";

            $this->name = $name;

            //$this是PHP里面的伪变量,表示对象自身。可以通过$this->的方式访问对象的属性和方法

            $this->height = $height;

            $this->weight = $weight;

            $this->team = $team;

        }

        

        //析构函数,在程序执行结束的时候会自动调用

        //析构函数通常被用于清理程序使用的资源。比如程序使用了打印机,那么可以再析构函数里面释放打印机资源

        function __destruct(){

            echo "Destroying".$this->name."\n";

        }

        

        //定义方法

    public function run(){

        echo "Running\n";

    }

    public function dribblr(){

        echo "Dribbling\n";

    }

    public function pass(){

        echo "Passing\n";

    }

}

    //类到对象的实例化

    //类的实例化为对象时使用关键字new,new之后紧跟类的名称和一对括号

    $jordan = new NbaPlayer("Jordan","198cm","98kg","Bull");    

    

    //对象中的属性成员可以通过"->"符号来访问

    echo $jordan->name."\n";

    

    //对象中的成员方法可以通过"->"符号来访问

    $jordan->dribble();

    $jordan->run();

    

    //每一次用new实例化对象的时候,都会用类名后面的参数列表调用构造函数

    $james = new NbaPlayer("James","203cm","120kg","Heat")

    echo $james->name."\n";

    

    //通过把变量设为null,可以触发析构函数的调用

    //当对象不再使用的时候会触发析构函数

    $james = null;

    echo "from now on James will not be used.\n"

?>

析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。

对象的引用

<?php

//类的定义以关键字class开始,类的命名通常以每个单词第一个字母大写

    class NbaPlayer{

        public $name = "Jordan"; //定义属性

        public $height = "198cm";

        public $team = "Bull";

        public $playerNumber = "23";
        //构造函数,在对象被实例化的时候自动调用

        function __construct($name,$height,$weight,$team){

            echo "It is an  NbaPlayer constructor\n";

            $this->name = $name;

            //$this是PHP里面的伪变量,表示对象自身。可以通过$this->的方式访问对象的属性和方法

            $this->height = $height;

            $this->weight = $weight;

            $this->team = $team;

        }
        //析构函数,在程序执行结束的时候会自动调用

        //析构函数通常被用于清理程序使用的资源。比如程序使用了打印机,那么可以再析构函数里面释放打印机资源

        function __destruct(){

            echo "Destroying".$this->name."\n";

        }
        //定义方法

    public function run(){

        echo "Running\n";

    }

    public function dribblr(){

        echo "Dribbling\n";

    }

    public function pass(){

        echo "Passing\n";

    }

}

    //类到对象的实例化

    //类的实例化为对象时使用关键字new,new之后紧跟类的名称和一对括号

    $jordan = new NbaPlayer("Jordan","198cm","98kg","Bull");   
    //对象中的属性成员可以通过"->"符号来访问

    echo $jordan->name."\n";
    //对象中的成员方法可以通过"->"符号来访问

    $jordan->dribble();

    $jordan->run();
    //每一次用new实例化对象的时候,都会用类名后面的参数列表调用构造函数

    $james = new NbaPlayer("James","203cm","120kg","Heat")

    echo $james->name."\n";
    //对象的引用用于访问对象的属性和方法,$james,$james1和$james2都是对象的引用

    //$james和$james1是对象的两个独立引用

    //$james2是$james的影子,使用对象的同一个引用,任何一个赋值为null相当于删除了同一个引用

    $james1 = $james;

    $james2 = &$james
    $james = null;

    echo "from now on James will not be used.\n"

?>
PHP 相关文章推荐
谈谈PHP的输入输出流
Feb 14 PHP
php中字符串和正则表达式详解
Oct 23 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
php实现的日历程序
Jun 18 PHP
分享PHP函数实现数字与文字分页代码
Jul 28 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
Mar 17 PHP
Yii CDBCriteria常用方法实例小结
Jan 19 PHP
PHP实现图片的等比缩放和Logo水印功能示例
May 04 PHP
php数值转换时间及时间转换数值用法示例
May 18 PHP
PHP中的日期时间处理利器实例(Carbon)
Jun 09 PHP
php-msf源码详解
Dec 25 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
Jul 24 PHP
php学习笔记之基础知识
Nov 08 #PHP
推荐一款MAC OS X 下php集成开发环境mamp
Nov 08 #PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
Nov 08 #PHP
php中file_get_contents与curl性能比较分析
Nov 08 #PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
Nov 08 #PHP
PHP中使用循环实现的金字塔图形
Nov 08 #PHP
php调用新浪短链接API的方法
Nov 08 #PHP
You might like
PHP容易忘记的知识点分享
2013/04/30 PHP
基于PHP CURL获取邮箱地址的详解
2013/06/03 PHP
解析PHP生成静态html文件的三种方法
2013/06/18 PHP
php中hashtable实现示例分享
2014/02/13 PHP
PHP中怎样防止SQL注入分析
2014/10/23 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
使用Apache的rewrite
2021/03/09 Servers
javascript new fun的执行过程
2010/08/05 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
2012/03/29 Javascript
js仿百度有啊通栏展示效果实现代码
2013/05/28 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
利用JQuery和Servlet实现跨域提交请求示例分享
2014/02/12 Javascript
jquery实现pager控件示例
2014/04/09 Javascript
AngularJS 服务详细讲解及示例代码
2016/08/17 Javascript
微信小程序 页面跳转如何实现传值
2017/04/05 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
JavaScript一元正号运算符示例代码
2019/06/30 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
[00:32]DOTA2上海特级锦标赛 Ehome战队宣传片
2016/03/03 DOTA
python检查URL是否正常访问的小技巧
2017/02/25 Python
Python中按键来获取指定的值
2019/03/02 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
css3 clip实现圆环进度条的示例代码
2018/02/07 HTML / CSS
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
介绍一下HDLC(High-Level Data Link Control)高层数据链路协议
2012/01/21 面试题
美发活动策划书
2014/01/14 职场文书
校长一岗双责责任书
2015/05/09 职场文书
2015年保卫科工作总结
2015/05/14 职场文书
MySQL中连接查询和子查询的问题
2021/09/04 MySQL
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server
Python中Schedule模块使用详解 周期任务神器
2022/04/19 Python