Thinkphp常用配置
CHECK_FILE_CASE -- windows环境下面的严格检查大小写。

/* 项目设定 */
    'APP_DEBUG'    => false, // 是否开启调试模式
    'APP_DOMAIN_DEPLOY'     => false,   // 是否使用独立域名部署项目
    'APP_PLUGIN_ON'         => false,   // 是否开启插件机制
    'APP_FILE_CASE'         => false,   // 是否检查文件的大小写 对Windows平台有效
    'APP_GROUP_DEPR'        => '.',     // 模块分组之间的分割符
    'APP_GROUP_LIST'        => '',      // 项目分组设定,多个组之间用逗号分隔,例如'Home,Admin'
    'APP_AUTOLOAD_REG'      => false,   // 是否开启SPL_AUTOLOAD_REGISTER
    'APP_AUTOLOAD_PATH'     => 'Think.Util.',// __autoLoad 机制额外检测路径设置,注意搜索顺序
    'APP_CONFIG_LIST'       => array('taglibs','routes','tags','htmls','modules','actions'),// 项目额外需要加载的配置列表,默认包括:taglibs(标签库定义),routes(路由定义),tags(标签定义),(htmls)静态缓存定义, modules(扩展模块),actions(扩展操作)

 /* Cookie设置 */
    'COOKIE_EXPIRE'         => 3600,    // Coodie有效期
    'COOKIE_DOMAIN'         => '',      // Cookie有效域名
    'COOKIE_PATH'           => '/',     // Cookie路径
    'COOKIE_PREFIX'         => '',      // Cookie前缀 避免冲突


/* 数据库设置 */
    'DB_TYPE'               => 'mysql',     // 数据库类型
     'DB_HOST'               => 'localhost', // 服务器地址
     'DB_NAME'               => '',          // 数据库名
     'DB_USER'               => 'root',      // 用户名
     'DB_PWD'                => '',          // 密码
     'DB_PORT'               => 3306,        // 端口
     'DB_PREFIX'             => 'think_',    // 数据库表前缀
   'DB_SUFFIX'             => '',          // 数据库表后缀
    'DB_FIELDTYPE_CHECK'    => false,       // 是否进行字段类型检查
    'DB_FIELDS_CACHE'       => true,        // 启用字段缓存
    'DB_CHARSET'            => 'utf8',      // 数据库编码默认采用utf8
    'DB_DEPLOY_TYPE'        => 0, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    'DB_RW_SEPARATE'        => false,       // 数据库读写是否分离 主从式有效


 /* 数据缓存设置 */
    'DATA_CACHE_TIME' => -1,      // 数据缓存有效期
    'DATA_CACHE_COMPRESS'   => false,   // 数据缓存是否压缩缓存
    'DATA_CACHE_CHECK' => false,   // 数据缓存是否校验缓存
    'DATA_CACHE_TYPE' => 'File', // 数据缓存类型,支持:File|Db|Apc|Memcache|Shmop|Sqlite| Xcache|Apachenote|Eaccelerator
    'DATA_CACHE_PATH'       => TEMP_PATH,// 缓存路径设置 (仅对File方式缓存有效)
    'DATA_CACHE_SUBDIR' => false,    // 使用子目录缓存 (自动根据缓存标识的哈希创建子目录)
    'DATA_PATH_LEVEL'       => 1,        // 子目录缓存级别

    /* 错误设置 */
    'ERROR_MESSAGE' => '您浏览的页面暂时发生了错误!请稍后再试~',//错误显示信息,非调试模式有效
    'ERROR_PAGE'    => '', // 错误定向页面

    /* 静态缓存设置 */
    'HTML_CACHE_ON'   => false,   // 默认关闭静态缓存
    'HTML_CACHE_TIME' => 60,      // 静态缓存有效期
    'HTML_READ_TYPE'        => 0,       // 静态缓存读取方式 0 readfile 1 redirect
    'HTML_FILE_SUFFIX'      => '.shtml',// 默认静态文件后缀

    /* 语言设置 */
    'LANG_SWITCH_ON'        => false,   // 默认关闭多语言包功能
    'LANG_AUTO_DETECT'      => true,   // 自动侦测语言 开启多语言功能后有效

    /* 日志设置 */
    'LOG_RECORD'            => false,   // 默认不记录日志
    'LOG_FILE_SIZE'         => 2097152, // 日志文件大小限制
    'LOG_RECORD_LEVEL'      => array('EMERG','ALERT','CRIT','ERR'),// 允许记录的日志级别

    /* 分页设置 */
   'PAGE_ROLLPAGE'         => 5,      // 分页显示页数
   'PAGE_LISTROWS'         => 20,     // 分页每页显示记录数

    /* SESSION设置 */
    'SESSION_AUTO_START'    => true,    // 是否自动开启Session
    // 内置SESSION类可用参数
    //'SESSION_NAME'          => '',      // Session名称
    //'SESSION_PATH'          => '',      // Session保存路径
    //'SESSION_CALLBACK'      => '',      // Session 对象反序列化时候的回调函数

    /* 运行时间设置 */
    'SHOW_RUN_TIME'   => false,   // 运行时间显示
    'SHOW_ADV_TIME'   => false,   // 显示详细的运行时间
    'SHOW_DB_TIMES'   => false,   // 显示数据库查询和写入次数
    'SHOW_CACHE_TIMES' => false,   // 显示缓存操作次数
    'SHOW_USE_MEM'   => false,   // 显示内存开销
    'SHOW_PAGE_TRACE' => false,   // 显示页面Trace信息 由Trace文件定义和Action操作赋值
    'SHOW_ERROR_MSG'        => true,    // 显示错误信息

 /* 模板引擎设置 */
    'TMPL_ENGINE_TYPE' => 'Think',     // 默认模板引擎 以下设置仅对使用Think模板引擎有效
    'TMPL_DETECT_THEME'     => false,       // 自动侦测模板主题
    'TMPL_TEMPLATE_SUFFIX' => '.html',     // 默认模板文件后缀
    'TMPL_CACHFILE_SUFFIX' => '.php',      // 默认模板缓存后缀
    'TMPL_DENY_FUNC_LIST' => 'echo,exit', // 模板引擎禁用函数
    'TMPL_PARSE_STRING'     => '',          // 模板引擎要自动替换的字符串,必须是数组形式。
    'TMPL_L_DELIM'          => '{',   // 模板引擎普通标签开始标记
    'TMPL_R_DELIM'          => '}',   // 模板引擎普通标签结束标记
    'TMPL_VAR_IDENTIFY'     => 'array',     // 模板变量识别。留空自动判断,参数为'obj'则表示对象
    'TMPL_STRIP_SPACE'      => false,       // 是否去除模板文件里面的html空格与换行
    'TMPL_CACHE_ON'   => true,        // 是否开启模板编译缓存,设为false则每次都会重新编译
    'TMPL_CACHE_TIME' => -1,         // 模板缓存有效期 -1 为永久,(以数字为值,单位:秒)
    'TMPL_ACTION_ERROR'     => 'Public:success', // 默认错误跳转对应的模板文件
    'TMPL_ACTION_SUCCESS'   => 'Public:success', // 默认成功跳转对应的模板文件
    'TMPL_TRACE_FILE'       => THINK_PATH.'/Tpl/PageTrace.tpl.php',     // 页面Trace的模板文件
    'TMPL_EXCEPTION_FILE'   => THINK_PATH.'/Tpl/ThinkException.tpl.php',// 异常页面的模板文件
    'TMPL_FILE_DEPR'=>'/', //模板文件MODULE_NAME与ACTION_NAME之间的分割符,只对项目分组部署有效
    // Think模板引擎标签库相关设定
    'TAGLIB_BEGIN'          => '<', // 标签库标签开始标记
    'TAGLIB_END'            => '>', // 标签库标签结束标记
    'TAGLIB_LOAD'           => true, // 是否使用内置标签库之外的其它标签库,默认自动检测
    'TAGLIB_BUILD_IN'       => 'cx', // 内置标签库名称(标签使用不必指定标签库名称),以逗号分隔
    'TAGLIB_PRE_LOAD'       => '',   // 需要额外加载的标签库(须指定标签库名称),多个以逗号分隔
    'TAG_NESTED_LEVEL' => 3,    // 标签嵌套级别
    'TAG_EXTEND_PARSE'      => '',   // 指定对普通标签进行扩展定义和解析的函数名称。

    /* 表单令牌验证 */
    'TOKEN_ON'                    =>   true,     // 开启令牌验证
    'TOKEN_NAME'                =>   '__hash__',    // 令牌验证的表单隐藏字段名称
    'TOKEN_TYPE'                 =>    'md5',   // 令牌验证哈希规则

    /* URL设置 */
'URL_CASE_INSENSITIVE' => false,   // URL地址是否不区分大小写
    'URL_ROUTER_ON'         => false,   // 是否开启URL路由
    'URL_DISPATCH_ON'       => true, // 是否启用Dispatcher
    'URL_MODEL'      => 1,       // URL访问模式,可选参数0、1、2、3,代表以下四种模式:
    // 0 (普通模式); 1 (PATHINFO 模式); 2 (REWRITE 模式); 3 (兼容模式) 当URL_DISPATCH_ON开启后有效; 默认为PATHINFO 模式,提供最好的用户体验和SEO支持
    'URL_PATHINFO_MODEL'    => 2,       // PATHINFO 模式,使用数字1、2、3代表以下三种模式:
    // 1 普通模式(参数没有顺序,例如/m/module/a/action/id/1);
    // 2 智能模式(系统默认使用的模式,可自动识别模块和操作/module/action/id/1/ 或者 /module,action,id,1/...);
    // 3 兼容模式(通过一个GET变量将PATHINFO传递给dispather,默认为s index.php?s=/module/action/id/1)
    'URL_PATHINFO_DEPR'     => '/', // PATHINFO模式下,各参数之间的分割符号
    'URL_HTML_SUFFIX'       => '', // URL伪静态后缀设置

    /* 系统变量名称设置 */
    'VAR_GROUP'             => 'g',     // 默认分组获取变量
    'VAR_MODULE'            => 'm', // 默认模块获取变量
    'VAR_ACTION'            => 'a', // 默认操作获取变量
    'VAR_ROUTER'            => 'r',     // 默认路由获取变量
    'VAR_PAGE'              => 'p', // 默认分页跳转变量
    'VAR_TEMPLATE'          => 't', // 默认模板切换变量
'VAR_LANGUAGE'          => 'l', // 默认语言切换变量
    'VAR_AJAX_SUBMIT'       => 'ajax', // 默认的AJAX提交变量
    'VAR_PATHINFO'          => 's', // PATHINFO 兼容模式获取变量例如 ?s=/module/action/id/1 后面的参数取决于URL_PATHINFO_MODEL 和 URL_PATHINFO_DEPR


 /* 模板引擎设置 */
    'TMPL_ENGINE_TYPE' => 'Think',     // 默认模板引擎 以下设置仅对使用Think模板引擎有效
    'TMPL_DETECT_THEME'     => false,       // 自动侦测模板主题
    'TMPL_TEMPLATE_SUFFIX' => '.html',     // 默认模板文件后缀
    'TMPL_CACHFILE_SUFFIX' => '.php',      // 默认模板缓存后缀
    'TMPL_DENY_FUNC_LIST' => 'echo,exit', // 模板引擎禁用函数
    'TMPL_PARSE_STRING'     => '',          // 模板引擎要自动替换的字符串,必须是数组形式。
    'TMPL_L_DELIM'          => '{',   // 模板引擎普通标签开始标记
    'TMPL_R_DELIM'          => '}',   // 模板引擎普通标签结束标记
    'TMPL_VAR_IDENTIFY'     => 'array',     // 模板变量识别。留空自动判断,参数为'obj'则表示对象
    'TMPL_STRIP_SPACE'      => false,       // 是否去除模板文件里面的html空格与换行
    'TMPL_CACHE_ON'   => true,        // 是否开启模板编译缓存,设为false则每次都会重新编译
    'TMPL_CACHE_TIME' => -1,         // 模板缓存有效期 -1 为永久,(以数字为值,单位:秒)
    'TMPL_ACTION_ERROR'     => 'Public:success', // 默认错误跳转对应的模板文件
    'TMPL_ACTION_SUCCESS'   => 'Public:success', // 默认成功跳转对应的模板文件
    'TMPL_TRACE_FILE'       => THINK_PATH.'/Tpl/PageTrace.tpl.php',     // 页面Trace的模板文件
    'TMPL_EXCEPTION_FILE'   => THINK_PATH.'/Tpl/ThinkException.tpl.php',// 异常页面的模板文件
    'TMPL_FILE_DEPR'=>'/', //模板文件MODULE_NAME与ACTION_NAME之间的分割符,只对项目分组部署有效
    // Think模板引擎标签库相关设定
    'TAGLIB_BEGIN'          => '<', // 标签库标签开始标记
    'TAGLIB_END'            => '>', // 标签库标签结束标记
    'TAGLIB_LOAD'           => true, // 是否使用内置标签库之外的其它标签库,默认自动检测
    'TAGLIB_BUILD_IN'       => 'cx', // 内置标签库名称(标签使用不必指定标签库名称),以逗号分隔
    'TAGLIB_PRE_LOAD'       => '',   // 需要额外加载的标签库(须指定标签库名称),多个以逗号分隔
    'TAG_NESTED_LEVEL' => 3,    // 标签嵌套级别
    'TAG_EXTEND_PARSE'      => '',   // 指定对普通标签进行扩展定义和解析的函数名称。

    /* 表单令牌验证 */
    'TOKEN_ON'                    =>   true,     // 开启令牌验证
    'TOKEN_NAME'                =>   '__hash__',    // 令牌验证的表单隐藏字段名称
    'TOKEN_TYPE'                 =>    'md5',   // 令牌验证哈希规则

    /* URL设置 */
'URL_CASE_INSENSITIVE' => false,   // URL地址是否不区分大小写
    'URL_ROUTER_ON'         => false,   // 是否开启URL路由
    'URL_DISPATCH_ON'       => true, // 是否启用Dispatcher
    'URL_MODEL'      => 1,       // URL访问模式,可选参数0、1、2、3,代表以下四种模式:
    // 0 (普通模式); 1 (PATHINFO 模式); 2 (REWRITE 模式); 3 (兼容模式) 当URL_DISPATCH_ON开启后有效; 默认为PATHINFO 模式,提供最好的用户体验和SEO支持
    'URL_PATHINFO_MODEL'    => 2,       // PATHINFO 模式,使用数字1、2、3代表以下三种模式:
    // 1 普通模式(参数没有顺序,例如/m/module/a/action/id/1);
    // 2 智能模式(系统默认使用的模式,可自动识别模块和操作/module/action/id/1/ 或者 /module,action,id,1/...);
    // 3 兼容模式(通过一个GET变量将PATHINFO传递给dispather,默认为s index.php?s=/module/action/id/1)
    'URL_PATHINFO_DEPR'     => '/', // PATHINFO模式下,各参数之间的分割符号
    'URL_HTML_SUFFIX'       => '', // URL伪静态后缀设置

    /* 系统变量名称设置 */
    'VAR_GROUP'             => 'g',     // 默认分组获取变量
    'VAR_MODULE'            => 'm', // 默认模块获取变量
    'VAR_ACTION'            => 'a', // 默认操作获取变量
    'VAR_ROUTER'            => 'r',     // 默认路由获取变量
    'VAR_PAGE'              => 'p', // 默认分页跳转变量
    'VAR_TEMPLATE'          => 't', // 默认模板切换变量
'VAR_LANGUAGE'          => 'l', // 默认语言切换变量
    'VAR_AJAX_SUBMIT'       => 'ajax', // 默认的AJAX提交变量
    'VAR_PATHINFO'          => 's', // PATHINFO 兼容模式获取变量例如 ?s=/module/action/id/1 后面的参数取决于URL_PATHINFO_MODEL 和 URL_PATHINFO_DEPR

继承
继承使用的场景:
当别人有,自己没有,还想要,去继承那个人
继承的格式
class A extends B{}
如果A类继承了B类,A类中就拥有了B类中所有成员属性和成员方法,但是除了私有成员
访问权限(继承等级:321)

        public          protected       private

在类的外部 ok no no
在子类中 ok ok no
在本类中 ok ok ok
public等级为3,protected等级为2,private等级为1;
子类对父类方法的重写(覆盖)

当子类出现与父类同名的方法时,就是对父类方法的覆盖重写
如果调用该方法,调用时优先调用本类的方法(子类的方法)
在子类中调用父类中的成员方法:

parent::方法名()
PHP只支持单继承

一个子类只能有一个父类,但是一个类可以被多个子类继承;
可以有多层继承关系;
如果A类继承了B类,B类继承了C类,D类继承了A类,
D类就同时拥有了ABC三个类的所有的非私有的成员属性和成员方法;
如果需要使用多个类的功能时,可以链式继承

class A extends B {}
class B extends C {}
class D extends A {}

final 关键字 最终 常量

final 关键字只能用来修饰方法和类;
被final修饰的类不能被继承,不允许有子类
被final修饰的成员方法,不能被子类覆盖(重写)
作用:为了安全;没有必要;
static关键字 静态

可以和PPP修饰符一起来修饰成员属性(静态属性)和成员方法(静态方法);不需要使用new关键字来实例化对象就可以直接访问和调用

访问形式:
在类的外部 类名::$属性名 类名::方法名()
在类的内部 self::$属性名 self::方法名()

在静态方法中不允许使用$this 关键字
在静态方法中只能访问静态属性和静态方法
静态属性是作为该类对象的共有属性存在的
static 应用
单模式设计模式(单例,单件)

在当前脚本中只产生一个该类对象
在同脚本中一个类只能有一个实例化对象存在

具体的方法:
1,阻止在类的外部使用new 关键字来创建对象
将构建方法私有化
2,在类的内部创建一个对象
声明静态方法,在类的内部创建对象
3,将创建的对象存入一个位置,存档,作为判断的依据
声明静态方法来存放对象,存档
单态设计模式代码:

<?php
/*
===================================================
    static静态模式应用:
    在当前脚本中只产生一个该类对象,
    在同脚本中一个类只能有一个实例化对象存在
方法:1,阻止在类的外部使用new关键字来创建对象
        //将构造方法私有化
    2,在类的内部创建一个对象
        //声明静态方法 在类的内部创建对象
    3,将创建的对象存入一个位置,存档,作为判断的依据 
        //声明静态方法来存放对象 存档
====================================================
*/
      class Demo{
          static public $obj= null;//定义一个静态属性
          private function __construct(){
              echo "实例化了一个对象";
          }
          static public function getobj(){
              if(self::$obj == null){
                  $ob = new Demo();
                  self::$obj=$ob;
              }
              return self::$obj;
          }
      }
      Demo::getobj();
      Demo::getobj();
      Demo::getobj();
      Demo::getobj();
      //以上结果只会输出一次

面向对象

对象

具有一定功能和特征的事物就是对象
能满足某种需求的事物就是对象
对象就是一个具体的东西

具有相同功能和特征的对象的抽象就是类;思想上的
类就是一系列的东西和过程的一种总结和抽象
对象和类之间的关系

我们在使用过程中,不能直接使用类,而是需要一个而具体的对象,根据类来产生对象,
对象是由类产生的;

类的声明

class 类名 {}
成员属性(成员变量)

指的是一些特性,姓名,年龄,性别,是可变的;
注意: 1,成员属性在声明是必须加修饰符(3p)
2,成员属性的初始值可有可无;
3,成员属性在赋值时不能使用变量及函数调用
4,成员属性在赋值时可使用常量,运算

成员方法(成员函数)

指的是一些功能,行为,动作。他就是函数;
注意: 1,在定义成员方法时修饰符可有可无,如果不加默认public;
2,参数可有可无
3,返回值可有可无;

对象的实例化

格式:$var=new 类名()
对象->属性

对象访问符,相当于汉语中的 ‘的’;
对象访问成员属性时,不要加$,除非是可变变量;
对象赋值:$object -> 成员属性 = ‘值’;

$this 关键字

this本上就有这个的意思
$this在成员方法中使用,代表的是当前类的这个对象;
哪个对象来调用当前这个方法,$this就代表哪个对象;
调用这个方法前的对象是谁,$this就是代表谁;

构造方法

构造方法是一个特殊的成员方法
构造方法不需要对象加成员访问符来调用
当用new 关键字类实例化对象的时候会自动触发构造方法
方法名:__construct
与类名同名的方法也称之为构造方法
作用:初始化当前对象

析造方法

当该类对象在销毁时,自动触发
方法名:__destruct
销毁的几种情况:脚本执行完;unset;重新赋值;

以下是代码部分:

<?php
     
    //定义一个类;
    class Person{
        //成员属性
        public $name;
        public $age;
        public $sex;
 
        //构造方法
        public function __construct($n,$a,$s){//__construct在new 一个对象是自动触发,初始化属性
            $this->name=$n;//$this 只能用在成员方法中,指的是当前的这个对象;
            $this->age=$a;
            $this->sex=$s;
        }
 
        //成员方法
        public function test(){
            echo "成员方法就是成员函数";
        }
 
        //析构方法
        public function __destruct(){//析构方法不需要任何参数
            echo "析构方法在对象销毁时自动触发";
        }
    }
 
    //实例化对象,类不能直接用,而是通过实例化出一个而对象,用的是对象
    $a=new Person();
 
    echo $a->name;//访问成员属性
    $a->test();//调用成员函数

抽象类

在类中,如果至少有一个方法,没有方法体,直接以分号结束,

那么这个方法叫抽象方法,必须加abstract修饰方法;

包含抽象方法的类就叫抽象类,要用abstract来修饰;

不是所有抽象类必须包含抽象方法,但有抽象方法的类肯定是抽象类

作用:

不能直接实例化对象来使用;不能使用;

对子类起到约束作用

用法:创建一个类去继承这个抽象类,并定义覆盖父类的所有抽象方法;

代码部分:

 /*
        抽象类:在一个类中至少有一个方法,没有方法体,直接以分号结束;
                那么这个方法就是抽象方法,必须要有abstract来修饰;
                包含有抽象方法的类就叫抽象类;
                ps:不是所有的抽象类都必须包含抽象方法;
     
                作用:不能直接实例化对象来使用抽象类;
                     对子类有约束作用;
                用法:要想使用抽象类就必须创建一个类去继承这个抽象类,并定义覆盖父类的抽象方法;
        */
            //声明一个抽象类,对子类进行约束
            abstract class Person{
                public $name="张三";
                public $country="美国";
                abstract public function eat();//定义一个吃的抽象方法
                abstract public function say();//定义一个说话的抽象方法
                public function run(){//在抽象类中也可以定义非抽象方法
                    echo '我正在走路.......';
                }
            }
     
            //定义一个子类去继承抽象类,并实现抽象方法;
            //子类中要想实现对象,需要将抽象类中所有的抽象方法都覆盖重写
            class USAER extends Person{
                public function eat(){//将父类中的抽象覆盖,并随自己实现任意功能
                    echo $this->country.'的'.$this->name.'用筷子吃饭<br/>';
                }
                public function say(){//将父类张的抽象覆盖,实现
                    echo $this->country.'人说英语';
                }
                public function sing(){//该子类中可以有非抽象的方法
                    echo '我正在唱歌......';
                }
            }
            $usa=new USAER();
            $usa->eat();//输出美国的张三用筷子吃饭
            $usa->say();//输出美国人说英语
            $usa->sing();//子类中的非抽象方法不受影响
     


接口

如果在一个抽象类中只有抽象方法和常量,可以将其定义为接口(interface);
注意:接口类不能使用anstract来修饰;
作用:
不能直接使用,对子类起到约束作用;
抽象类中可以有非抽象方法,而接口类中全是抽象方法;
用法:用implements来实现接口的使用
ps:一个类只能有一个父类,但是一个类可以实现多个接口
代码部分:

<?php
 /*
 接口(interface):当一个类中,只有抽象方法和常量,那么可以定义为接口;
     定义格式:interface 接口名{}
     接口方法不能使用abstract来修饰;
     作用:不能直接使用,对子类进行约束;
     抽象类中可以有非抽象方法,而接口中全是抽象方法;
     使用:implements实现接口
      
     ps:一个类只能有一个父类,但是一个类可以实现多个接口
 */
      
     interface One{//定义一个接口
         const ASD='接口类中可以有常量';//接口类可以有常量
         public function AA();
         public function BB();
     }
     abstract class Two implements One{//实现接口的类
         public function AA(){//只实现了一个方法,还有一个二分法没有实现,必须定义为抽象类
             echo '如果不是全部实现,则Two类还是一个抽象类';
         }
     }
     class Three extends Two{//继承Two这个抽象类,
         public function BB(){//two是one的子类,一个抽象方法已经实现了,在这里还有一个需要实现
             echo '这儿是BB';
         }
     }
     $a=new Three();//实例化对象
     $a->AA();//如果不是全部实现,则Two类还是一个抽象类
     $a->BB();//这儿是BB
         //在定义三个接口类,
     interface AAA{
         public function AAA();
     }
     interface BBB{
         public function BBB();
     }
     interface CCC{
         public function CCC();
     }
     //定义一个类来实现以上三个接口
     //一个类可以实现多个接口;
     class Myimp implements AAA,BBB,CCC{
         function AAA(){
             echo '这里是AAA';
         }
         function BBB(){
             echo "这里是BBB";
         }
         function CCC(){
             echo "这是CCC";
         }
     }
     $b=new myimp();
     $b->BBB();//这里是BBB


多态性

对于同一个方法,传入不同的对象,实现了不同的结果,就是多态的表现;
一段程序可以处理不同对象的能力
代码部分:

    <?php
    /*
    多态:一种方法;传入不同的对象,会有不同的处理结果
        方法一样,所以我们使用接口约束子类中的方法
        php中的多态,大多指的是重写,需要方法名一样
    */
    //定义说话接口类
    interface SAY{
        function say();
    }
    class Ms implements SAY{//定义美国人说话类
        function say(){
            echo "美国人说英语";
        }
    }
    class CHR implements SAY{//定义中国人说话类
        function say(){
            echo "中国人说汉语";
        }
    }
    class JPn implements SAY{//定义日本人说话类
        function say(){
            echo "日本人说日语";
        }
    }
    class start{//定义一个开始说话的类,调用say();
        function startsay($who){
            $who->say();//对象不同,方法一样
        }
    }
    $a=new start();
    $a->startsay(new JPn);//日本人说日语,  //new JPn 一个日本类说话的对象
    $a->startsay(new CHR);//中国人说汉语
    $a->startsay(new Ms);//美国人说英语

面向对象
对象

具有一定功能和特征的事物就是对象
能满足某种需求的事物就是对象
对象就是一个具体的东西

具有相同功能和特征的对象的抽象就是类;思想上的
类就是一系列的东西和过程的一种总结和抽象
对象和类之间的关系

我们在使用过程中,不能直接使用类,而是需要一个而具体的对象,根据类来产生对象,
对象是由类产生的;
类的声明

class 类名 {}
成员属性(成员变量)

指的是一些特性,姓名,年龄,性别,是可变的;
注意: 1,成员属性在声明是必须加修饰符(3p)
2,成员属性的初始值可有可无;
3,成员属性在赋值时不能使用变量及函数调用
4,成员属性在赋值时可使用常量,运算
成员方法(成员函数)

指的是一些功能,行为,动作。他就是函数;
注意: 1,在定义成员方法时修饰符可有可无,如果不加默认public;
2,参数可有可无
3,返回值可有可无;
对象的实例化

格式:$var=new 类名()
对象->属性

对象访问符,相当于汉语中的 ‘的’;
对象访问成员属性时,不要加$,除非是可变变量;
对象赋值:$object -> 成员属性 = ‘值’;
$this 关键字

this本上就有这个的意思
$this在成员方法中使用,代表的是当前类的这个对象;
哪个对象来调用当前这个方法,$this就代表哪个对象;
调用这个方法前的对象是谁,$this就是代表谁;
构造方法

构造方法是一个特殊的成员方法
构造方法不需要对象加成员访问符来调用
当用new 关键字类实例化对象的时候会自动触发构造方法
方法名:__construct
与类名同名的方法也称之为构造方法
作用:初始化当前对象
析造方法

当该类对象在销毁时,自动触发
方法名:__destruct
销毁的几种情况:脚本执行完;unset;重新赋值;

以下是代码部分:

<?php
     
    //定义一个类;
    class Person{
        //成员属性
        public $name;
        public $age;
        public $sex;
 
        //构造方法
        public function __construct($n,$a,$s){//__construct在new 一个对象是自动触发,初始化属性
            $this->name=$n;//$this 只能用在成员方法中,指的是当前的这个对象;
            $this->age=$a;
            $this->sex=$s;
        }
 
        //成员方法
        public function test(){
            echo "成员方法就是成员函数";
        }
 
        //析构方法
        public function __destruct(){//析构方法不需要任何参数
            echo "析构方法在对象销毁时自动触发";
        }
    }
 
    //实例化对象,类不能直接用,而是通过实例化出一个而对象,用的是对象
    $a=new Person();
 
    echo $a->name;//访问成员属性
    $a->test();//调用成员函数