php一种面向对象的语言

那么什么是面向对象呢?

  • 传统的面向过程的编程思想:

     相信很多人第一次接触编程都是c语言,c语言就是非常典型的面向过程的编程语言,将要实现的功能描述为一个从开始到结束的连续的“步骤(过程)”。依次逐步完成这些步骤。如果步骤较大,又可以将该步骤再次细分为子步骤,以此类推。程序从头开始执行一直到结尾并得到所需结果。例子:完成来传智“报名学习”这件事,可以这样来实现:第一步,学生提出要报名,并提供姓名和照片第二步,咨询老师接收照片并登记学生姓名第三步,学生缴费(付款到学校账号)并获得缴费凭证第四步,咨询老师验证凭证并分配班级第五步,最终结果为:报名完成,学生可以在规定的时间到规定的班级(教室)上课,数据库中就有了该学生的信息。
    
  • 现代的面向对象的编程思想:

    将要实现的功能描述为一个“对象/物体”完成的任务——现实中也是如此:功能的实现都是依赖于一个实体的“行动/操作/动作”。完成该最终功能的过程中需要实现其他中间功能(过程),则再去调用其它对象(或也可能是自己本身)来实现该中间功能。整个系统的完成(功能的实现)看作是一个一个对象在发挥其各自的“能力”并在内部进行协调有序的调用过程。例子:完成来传智“报名学习”这件事,可以这样来处理:学生对象:有姓名有照片,有所属班级,能“提出报名”,能“缴费”,咨询老师对象:能接收照片并登记姓名,能分配班级。
    

    班级对象:有班号,有开班日期,有教室。

  • 面向对象基本概念:

    类与对象:类是描述一类事物的一个总称,是具有相同特征特性的该类事物的一个通用名字(称呼);比如人就是一个类(人类),狗也是一个类(狗类),它们又属于一个更大的类(哺乳类),桌子,手机,书都是一个类;
    对象是一个明确的具体的“物体”,是某个类中的一个“实物”(相对来说,类就是一种抽象的泛称)。对象离不开类,或者说,对象一定隶属于某个类——有类才有对象,先有类再有对象。比如“黄晓明”就是“人”这个类的一个具体对象,“阿黄”是“狗”这个类的一个具体对象。一个类决定了一个对象所具有的所有特征特性信息,比如我是人类,则我有:姓名,性别,年龄,我还能吃饭,走路,说话。一个对象的所有特征特性信息,都是由其所属的类决定的,但每个对象又很有可能有自己不同的特征特性信息,比如有个对象的名字叫吴六奇,性别男,会写程序,另一个对象可能叫章子怡,性别女,会演戏。语法上,一个类内部可以具有自己的“变量”和“函数”,但此时在技术术语上就对应地称为“属性”和“方法”。一个类也可以有自己的常量。这些属性,方法和常量就都称为“类”的“成员”。
    
  • 对象的创建:

就是由一个类“创建”出一个具体的“物体”——专业说法就是对象。创建对象的语法可以有:
new 类名();
new 变量名(); //该变量的内容是一个表示类名的字符串。
new 对象名();//创建该对象所属类的一个新对象
new self; //用于在类的方法内部创建一个该类对象。
类名::getNew();//定义类的一个静态方法用于获取该类的一个对象

  • 对象的使用:

      要么使用其属性,要么使用其方法。使用属性,就可以当作一个变量看待。使用方法,就可以当作一个函数看待。一个类中能且只能包含如下3种成员(代码):变量(称为属性),函数(称为方法),常量(称为类常量)。
    
  • 一般属性:

           属性就是定义在类中的变量,需要使用public或var来修饰(定义),也可以使用protected或private来修饰(见后续知识)。定义的时候可以不赋值,也可以赋(初)值,但只能是一个“直接值”(常量值)或常量,不能是变量值或计算值或函数调用返回值等。
    
  • 属性的使用形式:

         对象名->属性名;属性是可读可写的(可取值赋值)。
    
  • 一般方法:

            方法就是定义在类中的函数,但函数前可以使用public,protected, private修饰,也可以省略。但该方法的调用(使用)不能独立进行,而是需要通过对象来调用。方法中$this关键字具有特定含义:表示调用该方法的对象。获取$this的所属类:get_class($this)
    
  • 静态属性:

            一个仅仅隶属于(依附于)类的属性,其是通过类名直接来取用的。
    
  • 定义形式:

    static $静态属性名 [ = 初值];//访问修饰符省略则默认为public,初值也应该是直接值或常量
    使用形式:类名::$静态属性名;//可取值可赋值;
    
  • 静态方法:

            一个仅仅隶属于(依附于)类的方法,其是通过类名直接调用的(不过新版php已经可以使用该类的对象名来调用了)
    
  • 定义形式:
    [访问修饰符] static function $静态方法名(…){ …… }

  • 使用形式:

    类名::静态方法名(…);其中类名也可以用该类的对象名,一个内容为该类名的字符串变量名,self等来代替。

  • self关键字:

用在方法中,表示该方法所在的类。

  • static关键字:

代替self关键字的位置,除了具有self作用外,还具有更灵活的作用,那就是所谓“后期静态绑定”。注意:$this在静态方法中不能使用,静态方法中不应调用非静态方法。

  • 类常量:

            一个仅仅隶属于(依附于)类的常量,其是通过类名直接来取用的(不过新版php已经可以使用该类的对象名来调用了)
    
  • 定义形式:

    const 常量名 = 初值;//必须赋初值

  • 使用形式:

    类名::常量名;其中类名也可以用该类的对象名,一个内容为该类名的字符串变量名,self等来代替。

  • 构造方法(函数):

            构造方法是一个类在进行实例化(new一个对象出来)的时候,会首先自动调用的方法。构造方法适用于创建对象时(使用对象前)对该对象做一些初始化工作。定义形式:[访问修饰符] function __construct(...){ ...... };//访问修饰符通常总是需要public(或省略)。调用形式:实际上,没有直接的调用形式,而是在new一个对象的时候就调用了:new C1("小花",18,"女");如果一个类中定义了构造方法,则实例化该类时就会调用该方法,且实例化时的参数需要跟构造方法的参数匹配。如果一个类中没有定义构造方法,则会自动调用其父类的构造方法(如果有),则实例化时的参数需跟父类的构造方法的参数匹配。也可以在当前类的构造方法中调用父类的构造方法:parent::__construct();
    
  • 析构方法(函数):

            析构方法是在一个对象被销毁的时候会自动调用(执行)的方法;对象销毁的几种情况:脚本程序运行结束,自动销毁;明确地unset()一个对象变量,则被销毁;改变对象变量的值,被销毁;析构方法适用于销毁对象时对对象中使用的一些资源进行清理(销毁)——不过实际上现代PHP已经内具了垃圾回收机制,一般无需清理。。定义形式:function __destruct(){ ...... };//注意:只能是public的,且不能有参数调用形式:无需在代码中手工调用,而是在代码运行结束时自动被调用(执行)。如果一个类中定义了析构方法,则销毁对象时就会调用该方法。如果一个类中没有定义析构方法,则销毁对象时就会调用其父类的析构方法(如果有)
    
  • 类的继承:

        基本含义:类是用来描述现实世界中同一种事物的共有特性的抽象模型。但现实世界中,不同种类的事物之间有往往有一些上下级或大小范围的关系。比如,动物是一个“类”,具有某些特性。但脊椎动物也是一个类,也具有一些特性,且同时具有动物类的所有特性。哺乳动物还是一个类,具有一些特性,并同时具有脊椎动物的所有特性。如此等等,则面向对象编程中,我们定义的类也同样可以具有类似的关系特征,这就是类的继承。**基本语法:**extends**基本概念:****继承:**一个类从另一个已有的类获得其特性,称为继承。**派生:**从一个已有的类产生一个新的类,称为派生。**父类/子类:**已有类为父类,新建类为子类。**单继承:**一个类只能从一个上级类继承其特性信息。PHP和大多数面向对象的语言都是单继承模式。C++是多继承。**扩展:**在子类中再来定义自己的一些新的特有的特性信息(属性,方法和常量)。没有扩展,继承也就没有意义了。
    
  • 访问控制修饰符:

            public公共的:在所有位置都可访问(使用)。protected受保护的:只能再该类内部和该类的子类或父类中访问(使用)。private私有的:只能在该类内部访问(使用)。parent关键字:在类的内部用来表示(代表)该类的父类。可以用来访问父类的属性或方法或常量。
    
  • 构造和析构方法中的调用上级同样方法的问题:

            子类中没有定义构造方法时,会自动调用父类的构造方法。因此实例化子类时,需按照父类的构造方法的形式进行。子类定义了自己的构造方法,则不会自动调用父类的构造方法,但可以手动调用:parent::__construct();子类中没有定义析构方法时,会自动调用父类的析构方法。子类定义了自己的析构方法,则不会自动调用父类的析构方法,但可以手动调用:parent::__destruct()
    
  • 重写override

            **什么是重写?**重写又叫“覆盖”,就是将从父类继承下来的属性或方法重新定义。只有保护的或公有的属性或方法能够被覆盖。**为什么要重写?**因为父类的某个属性可能对于子类来说不够具体或详细,子类想要同样特性或功能的更准确或详细信息。**重写的基本要求:**访问控制权限,方法的参数形式。**私有属性和私有方法的重写问题:**私有属性和方法都不能覆盖,但其实子类可以定义跟父类私有的同名属性或方法。只是当作一个自身的新的属性或方法来看待而已。不过方法的参数必须一致。**构造方法的重写问题:**构造方法不但可以像其他普通方法一样重写,而且,比普通方法更宽松:重写的时候参数可以不一致。**最终类final class:****最终方法final method:**
    
  • 设计模式:

        **工厂模式:**一种专门用于“生产”其他各种类的对象的一个类**单例模式:**一种只能从中实例化出来一个对象的类
    
  • 类的“扩大化”技术:

        **抽象类,抽象方法:**一个类可以使用关键字abstract声明为抽象类;抽象类是不能实例化的类,只用作其他类的父类。一个方法可以使用关键字abstract声明为抽象方法;抽象方法只需要声明方法头,不需要大括号部分的方法体。**一个类中有抽象方法,则该类必须声明为抽象类。**子类继承自一个抽象类,则子类必须实现父类中的所有抽象方法,除非子类也继续作为抽象类。子类实现抽象父类的方法时,访问控制修饰符的范围不能降低,且方法的参数也须一致。
    
  • 重载技术overloading:

            **属性重载:**__set(), __get(), __isset(), __unset()**方法重载:**__call(), __callstatic();
    
  • 接口interface:

            **什么是接口?为什么需要接口?接口的定义形式:****接口的实现:**使用接口被称为接口的“实现”(implements),其实就是类似“继承”**接口的多实现:接口常量:接口继承:
    有关类或对象的其他相关技术:****类的自动加载:**__autoload(), spl_autoload_register();**对象的复制(克隆):对象的遍历:PHP内置标准类:对象的类型转换:** 将得到一个标准类stdClass的对象**对象转换为对象:**没有变化;**数组转换为对象**:数组的键名当作属性名,值为对应值;**null转换为对象:**空对象;**其他标量数据转换为对象:**属性名为固定的“scalar”,值为该变量的值**类型约束:**可以对函数(或方法)的参数设定必须使用的类型。只能对对象,接口,数组进行约束,如下所示:function f1(类名 $p1){....}:要求该参数只能使用该类的对象;function f1(接口名 $p1){....}:要求该参数只能使用实现该接口的对象;function f1(array $p1){....}:要求该参数只能使用数组;其他的类型不能,比如:function f1(int $p1){...}, function f1(string $p1){...}都是错的。**与类有关的魔术常量:**__CLASS__, __METHOD__**与类有关的其他魔术方法:****已学过的魔术方法:**__construct, __destruct, __set(), __get(), __isset(), __unset(), __call(), __callstatic()__sleep()和__wakeup(): 序列化操作的时候,会先调用__sleep()方法,反序列化操作的时候会先调用__wakeup()方法。__tostring():将对象当作字符串来使用的时候,会自动调用该方法,以此来作为对象转换为字符串的结果数据。__invoke():将对象当作函数来使用的时候,会自动调用该方法。*与类有关的系统函数:*class_exists(), interface_exists(), get_class(),get_parent_class(), get_class_methods(), get_class_vars(), get_declared_classes()*与对象有关的系统函数:*is_object(),get_object_vars()*与类有关的运算符:*new,instanceof**面向对象编程思想的3个特征:封装,继承,多态。**
    
  • MVC框架与应用

    项目开发流程介绍
    显示与逻辑相分离原始做法:显示与逻辑混合高级做法:显示与逻辑分离实现方式:模板技术
    MVC框架原理MVC思想简单演示1数据生产文件数据显示文件逻辑(功能)控制文件MVC思想框架结构图MVC思想演示(常规带数据库操作)视图文件模型文件控制器文件
    **模型层(Model)的典型实现**功能:用于处理数据的存取操作,比如表的增删改查。模型层的典型代码模式控制器调用模型方法以获取数据基础模型类实现模型类的单例(模型工厂)整个模型层的类库结构图
    **控制器层(Controller)的典型实现**控制器的作用获取请求数据调用模型获取数据载入视图文件以显示数据控制器类功能:用于获取用户的请求数据并(或)获取模型数据以显示到视图中划分:通常按应用的模块(功能组)进行划分,一个控制器对应一个模块(页面)的不同功能/操作。区别:与模型层相比,模型层通常严格按照表来进行划分,一个模型处理一个表的数据操作动作:通常一个控制器是为了完成一个模块(页面)上的一些相关操作(功能),每个操作(功能)都对应一个控制器的动作(方法)。基础控制器类用于将控制器功能中的一些常见操作集中处理,比如设定文档编码,实现页面跳转。
    **视图层(View)的典型实现**功能:展示页面的静态内容,以及相关的变量数据。数据分为:普通标量数据,数组数据, 对象数据。
    有关MVC项目的其他常见做法请求分发器平台的区分目录结构设定基础常量设定自动加载的实现禁止其他目录中文件的直接访问
    使用MVC框架模拟实现ECShop后台登录数据库的准备文件结构分析登录流程分析视图所需相关文件(css,js,图片等)跳转的实现
    
  • PDO:PHP数据对象

    PDO介绍:
    连接MySQL数据库:DSN = "mysql:host=服务器地址/名称;port=端口号;dbname=数据库名";Options = array(PDO::MYSQL_ATTR_INIT_COMMAND=>’set names utf8’);$pdo = new pdo(DSN, "用户名", "密码", Options);
    执行sql语句执行所有sql语句:query(sql)执行无返回数据集的sql语句:exec(sql)
    释放资源:$pdo = null;$result->closecursor();
    pdo对象的其他常见操作$pdo->lastInsertId();$pdo->beginTransaction();$pdo->commit()$pdo->rollBack();$pdo->inTransaction();$pdo->setAttribute(属性名,属性值);
    pdo的错误处理错误模式:这是pdo的默认模式,可以获取pdo最后一次发生的错误信息。$pdo->errorCode();$pdo->errorInfo();异常模式:$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    PDOStatement(PDO结果集)对象PDO结果集对象常用方法:$stmt = $pdo->query(“select ...... ”);//这是获得结果集$stmt->rowCount() ;$stmt->columnCount() ;$stmt->fetch( [返回类型] ); //返回类型常用的有:PDO::FETCH_ASSOC:表示关联数组PDO::FETCH_NUM:表示索引数组PDO::FETCH_BOTH:表示前二者皆有,这是默认值PDO::FETCH_OBJ:表示对象$stmt->fetchAll([返回类型]);$stmt->fetchColumn( [$i] );$stmt->fetchObject();$stmt->errorCode();$stmt->errorInfo();$stmt->closeCursor();PDOStatement对象的预处理语句语法一:$sql = "select * from tab1 where f1 = :val1 and f2 >:val2"; //命名参数形式语法二:$sql = "select * from tab1 where f1 = ? and f2 >?"; //占位符形式预处理:$stmt = $pdo->prepare($sql);//也就是“编译”该sql语句,这样就可以多次反复使用该语句绑定值:$stmt->bindValue(命名参数或占位符序号, 值,[类型]);绑定变量:$stmt->bindParam(命名参数或占位符序号, 变量,[类型]); //类型为可选项,包括:PDO::PARAM_BOOL,PDO::PARAM_NULL,PDO::PARAM_INT,PDO::PARAM_STR,PDO::PARAM_BLOB,PARAM_INPUT_OUTPUT:表示参数是“可传出值的”。执行方式一:$stmt->excute(); //前提是前面进行的“绑定”操作执行方式二:$stmt->excute(arry(":val1"=>值1,":val2"=>值2)); //对应命名参数形式执行方式三:$stmt->excute(arry(值1,值2)); //对应占位符形式
    
  • 异常

    **基本理解:**错误:是程序出现问题时面向过程的处理方式,就是使用特定函数来捕获(取得)错误信息并进行处理;**异常:**是程序出现问题时面向对象的处理方式,就是使用特定语法来捕获(取得)错误信息并进行处理。
    基本使用形式:
    异常的抛出(创建)
    自定义异常类:
    class myException extends Exception{function __construct($message, $code = 0){parent::__construct($message, $code);}
    }
    将常见的错误转换为异常:
    class ErrorException extends Exception {function __construct($errMsg, $errCode, $errSeverity, $errFile, $errNo){}
    }
    set_error_handler("MyErrorHanler");
    function MyErrorHandler($errCode, $errMsg, $errFile, $errLine{throw new ErrorException($errMsg, $errCode, $errCode, $errFile, $errLine);
    }*
    

PHP核心知识点总结相关推荐

  1. 牛逼了!8000页Java 核心知识点+面试题整理,超全!

    今年金九银十要来了,很多小伙伴都在准备跳槽.小编为大家汇总了份Java核心知识点面试题和答案,基本上涵盖了所有后端技术栈,相信可以帮助大家拿到自己心仪的offer. 截了几张图,大家可以仔细查看左边的 ...

  2. pmp知识点详解-项目大牛整理_PMP核心知识点—第五章:项目范围管理(1)

    一.规划范围管理 Inputs 1.项目管理计划: 质量管理计划 项目生命周期描述 开发方法 2.项目章程: 项目章程记录项目目的.项目概述.假设条件.制约因素以及项目意图实现的高层级需求. 3.事业 ...

  3. Java核心知识点 --- 线程中如何创建锁和使用锁 Lock , 设计一个缓存系统

    理论知识很枯燥,但这些都是基本功,学完可能会忘,但等用的时候,会发觉之前的学习是非常有意义的,学习线程就是这样子的. 1.如何创建锁? Lock lock = new ReentrantLock(); ...

  4. pmp知识点详解-项目大牛整理_PMP核心知识点第六章:项目进度管理(3)

    四.估算活动持续时间 考虑因素: 收益递减规律 资源数量 学习曲线 技术进步 员工激励 Inputs 1.项目管理计划: 进度管理计划 范围基准 2.项目文件: 活动属性 活动清单 假设日志 经验教训 ...

  5. nsga2多目标优化之核心知识点(快速非支配排序、拥挤距离、精英选择策略)详解(python实现)

    文章目录 一.多目标优化算法简介 1.基本知识 二.NSGA2算法 1.基本原理 2.快速非支配排序 2.1快速非支配排序 python实现 3.拥挤距离 3.1 拥挤距离python 实现 4.精英 ...

  6. java 重用性_Java开发重用性必备的三大核心知识点

    互联网开发行业的人在问我提高java代码可重用性有哪些方法措施,那今天我就给大家详细讲下提高java代码可重用性的措施吧,希望不懂的可以从中学习加以理解,懂的也可以加以巩固下这些知识点,我把提高jav ...

  7. pmp知识点详解-项目大牛整理_PMP第七章:项目成本管理(1)项目管理核心知识点...

    一.规划成本管理 Inputs 1.项目管理计划: 进度管理计划 风险管理计划 2.项目章程: 规定了预先批准的财务资源,可据此确定详细的项目成本 规定的项目审批要求也对项目成本管理有影响 3.事业环 ...

  8. 透过面试题,洞察Hbase 核心知识点

    LSM  算法 HFile 索引 ,二级索引 hbase的问题 1.hbase怎么预分区? 2.hbase怎么给web前台提供接口来访问? 3.htable API有没有线程安全问题,在程序中是单例还 ...

  9. pmp知识点详解-项目大牛整理_PMP核心知识点—第四章:项目整合管理(一)

    文章来源:科科过PMP 作者:科科过PMP 由知乎号"慧翔天地PMP"推荐 如有侵权请联系小编看到后第一时间处理 一.制定项目章程1Inputs⑴商业文件→商业论证: ①记录项目目 ...

  10. Java面试详解(2020版):500+ 面试题和核心知识点详解

    与其在网上拼命的找面试题,不如加入我们畅快的阅读. 为了写好这些面试题,我先后拜访了一二十家互联网公司,与不同的面试官和面试者进行面对面探讨,深入了解了企业对于面试者的要求和常见的 Java 面试题型 ...

最新文章

  1. 终于把XGBoost总结写出来了!
  2. 洛谷 P 4180 次小生成树
  3. 【转】DICOM图像像素值(灰度值)转换为CT值
  4. vmware安装渗透系统 Linux Kail最新版
  5. 1.TCP/IP 详解卷1 --- 概述
  6. XCode应该是从11.4开始支持Sandbox
  7. python 数据分析 电信_实例 | 教你用Python写一个电信客户流失预测模型
  8. android x86 兼容问题,X86如何解决Android应用兼容性问题
  9. java.lang.UnsatisfiedLinkError: Couldn't load XXX
  10. oracle 19c ORA-00942: 表或视图不存在 ORA-02063: 紧接着 line
  11. 【初识AI】(一):ASR和NLP
  12. 7个国外社交网络用户数据情况
  13. 如何从request中获取域名
  14. 如何用计算机解开op手机密码,oppo清除锁屏密码【操作技巧】
  15. oracle数据库:查询平均分时,保留小数位数
  16. python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
  17. Sufficient Statistic (充分统计量)
  18. 浅谈入职两个半月心得和感受
  19. python 自动生成文档
  20. 安川MOTOSIM-EG-VRC仿真软件中文说明书

热门文章

  1. 计算机等级考试进制转换,计算机各种进制转换练习题(附答案) .doc
  2. MFC-个人所得税计算器
  3. cad标注车位编号_在Asciidoctor中自动编号的标注
  4. Linux替换文件字符串和合并文件命令
  5. 【深度学习目标检测】一、基于yolov3的水果商品检测分类
  6. 计算机网络中的CATV,有线电视网络(catv)中的多媒体通信_视频通信
  7. Generating wikipedia by summarizing long sequences笔记
  8. leetcode 416. 分割等和子集
  9. 新手如何入门视频剪辑?分享超好用的视频剪辑工具,剪辑、压缩、封面制作一网打尽!
  10. 未来,属于终身学习者