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 相关文章推荐
输入值/表单提交参数过滤有效防止sql注入的方法
Dec 25 PHP
php使用多个进程同时控制文件读写示例
Feb 28 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
Jul 01 PHP
destoon数据库表说明汇总
Jul 15 PHP
php获取文件名后缀常用方法小结
Feb 24 PHP
php rsa 加密,解密,签名,验签详解
Dec 06 PHP
根据key删除数组中指定的元素实现方法
Mar 02 PHP
php表单文件iframe异步上传实例讲解
Jul 26 PHP
PHP实现动态创建XML文档的方法
Mar 30 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
Jul 12 PHP
php设计模式之适配器模式原理、用法及注意事项详解
Sep 24 PHP
php解决约瑟夫环算法实例分析
Sep 30 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
实现分十页分向前十页向后十页的处理
2006/10/09 PHP
杏林同学录(三)
2006/10/09 PHP
PHP __autoload()方法真的影响性能吗?
2012/03/30 PHP
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
php集成动态口令认证
2016/07/21 PHP
js实现杯子倒水问题自动求解程序
2013/03/25 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
2014/01/07 Javascript
分享一则javascript 调试技巧
2015/01/02 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
学习使用bootstrap基本控件(table、form、button)
2016/04/12 Javascript
seajs学习之模块的依赖加载及模块API的导出
2016/10/20 Javascript
mui上拉加载功能实例详解
2017/04/13 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
2017/04/13 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
webpack分离css单独打包的方法
2018/06/12 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
2020/04/14 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
利用打码兔和超人打码自封装的打码类分享
2014/03/16 Python
python中pycurl库的用法实例
2014/09/30 Python
Python实现建立SSH连接的方法
2015/06/03 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
Spring @Enable模块驱动原理及使用实例
2020/06/23 Python
Python2手动安装更新pip过程实例解析
2020/07/16 Python
Talbots官网:美国成熟女装品牌
2019/11/15 全球购物
Java面试中常遇到的问题,也是需要注意的几点
2013/08/30 面试题
北京天润融通.net面试题笔试题
2012/02/20 面试题
幼儿园教师工作制度
2014/01/22 职场文书
会计系毕业求职信
2014/08/07 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
2016年寒假家长评语
2015/10/10 职场文书
MySQL表类型 存储引擎 的选择
2021/11/11 MySQL
使用Redis实现分布式锁的方法
2022/06/16 Redis