命名空间

教学网站的内容不知道再怎么“笔记化”,用之即可

面向对象

类定义

创建对象

 $xxx = new 类名;

调用成员方法

 $xxx->方法名(参数);

举例:

<?php
class Site {
  /* 成员变量 */
  var $url;
  var $title;
  
  /* 成员函数 */
  function setUrl($par){
     $this->url = $par;
  }
  
  function getUrl(){
     echo $this->url . PHP_EOL; //换行符
  }
  
  function setTitle($par){
     $this->title = $par;
  }
  
  function getTitle(){
     echo $this->title . PHP_EOL;
  }
}
//创建了2个对象,三个对象各自都是独立的
$taobao = new Site;
$google = new Site;
// 调用成员函数,设置标题和URL
$taobao->setTitle( "淘宝" );
$google->setTitle( "Google 搜索" );
$taobao->setUrl( 'www.taobao.com' );
$google->setUrl( 'www.google.com' );
// 调用成员函数,获取标题和URL
$taobao->getTitle();
$google->getTitle();
$taobao->getUrl();
$google->getUrl();
?>

淘宝
Google 搜索
www.taobao.com
www.google.com

构造函数

主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,在创建对象的语句中与 new 运算符一起使用。

格式:

void __construct ([ mixed $args [, $... ]] )

在上面的例子中,就可以通过构造方法来初始化$url $title 变量:【就不需要再调用 setTitle 和 setUrl 方法】

完整代码:

<?php
class Site {
  /* 成员变量 */
  var $url;
  var $title;
  function __construct( $par1, $par2 ) {
    $this->url = $par1;
    $this->title = $par2;
  }
  /* 成员函数 */
  function setUrl($par){
     $this->url = $par;
  }
 
  function getUrl(){
     echo $this->url . PHP_EOL;
  }
 
  function setTitle($par){
     $this->title = $par;
  }
 
  function getTitle(){
     echo $this->title . PHP_EOL;
  }
}
$taobao = new Site('www.taobao.com', '淘宝');
$google = new Site('www.google.com', 'Google 搜索');
// 调用成员函数,获取标题和URL
$taobao->getTitle();
$google->getTitle();
$taobao->getUrl();
$google->getUrl();
?>

析构函数

与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数

格式:

void __destruct ( void )

继承

使用关键字 extends 来继承一个类

不支持多继承

格式:

方法重写

如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖,也称为方法的重写。

实例中重写了 getUrl 与 getTitle 方法:

访问控制

在前面添加关键字实现

实例代码【戳】

类属性必须定义为公有,受保护,私有之一。

如用 var 定义,则被视为公有

 # 可以对 public 和 protected 进行重定义,但 private 而不能

类中的方法可以被定义为公有,私有或受保护。

如没有设置关键字,默认为公有。

接口

可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容

通过 interface 关键字来定义的

就像定义一个标准的类一样,但其中定义所有的方法都是空的。

接口中定义的所有方法都必须是公有,这是接口的特性。

实现一个接口,使用 implements 操作符。

类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。

常量

可把在类中始终保持不变的值定义为常量

在定义和使用常量的时候不需要使用 $ 符号

常量值必须是一个定值不能是变量,类属性,数学运算的结果或函数调用

可以用一个变量来动态调用类。但该变量的值不能为关键字(如 self,parent 或 static)。

抽象类

任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的

抽象类不能被实例化

被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现

继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)

例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。

子类方法可以包含父类抽象方法中不存在的可选参数

实例代码【戳】

Static 关键字

可以不实例化类,直接访问

静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)

由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用

静态属性不可以由对象通过 -> 操作符来访问

可以用一个变量来动态调用类。但该变量的值不能为关键字 self,parent 或 static

Final 关键字

父类中的方法被声明为 final,则子类无法覆盖该方法

如果一个类被声明为 final,则不能被继承

调用父类构造方法

不会在子类的构造方法中自动的调用父类的构造方法

要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct() 

PHP 【六】的更多相关文章

  1. 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文

    阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...

  2. MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息

    MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...

  3. 【原】AFNetworking源码阅读(六)

    [原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AF ...

  4. CRL快速开发框架系列教程六(分布式缓存解决方案)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  5. 【微信小程序开发•系列文章六】生命周期和路由

    这篇文章理论的知识比较多一些,都是个人观点,描述有失妥当的地方希望读者指出. [微信小程序开发•系列文章一]入门 [微信小程序开发•系列文章二]视图层 [微信小程序开发•系列文章三]数据层 [微信小程 ...

  6. 我的MYSQL学习心得(六) 函数

    我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  7. 我的MYSQL学习心得(十六) 优化

    我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  8. ASP.NET MVC Model绑定(六)

    ASP.NET MVC Model绑定(六) 前言 前面的篇幅对于IValueProvider的使用做个基础的示例讲解,但是没并没有对 IValueProvider类型的实现做详细的介绍,然而MVC框 ...

  9. redis成长之路——(六)

    redis配置 为了码农在代码上只关心业务以及代码上的统一性,wenli.drive.redis内部使用配置来完成那些不同的场景,也就是说随便填填配置就能适应不同的场景! 当然配置多了码农也会受不了, ...

  10. SQL Server-聚焦EXISTS AND IN性能分析(十六)

    前言 前面我们学习了NOT EXISTS和NOT IN的比较,当然少不了EXISTS和IN的比较,所以本节我们来学习EXISTS和IN的比较,简短的内容,深入的理解,Always to review ...

随机推荐

  1. 分析dhcp.lease文件,统计DHCP服务器IP自动分配

    #!/usr/bin/env python # coding=utf-8 import string import time,datetime class TIMEFORMAT: def __init ...

  2. java基础-03基本语法

    关键词 常用关键字53个(含2个保留字): 1.保留关键字(2个) const --常量 常数:用于修改字段或局部变量的声明. goto--转到 指定跳转到标签,找到标签后,程序将处理从下一行开始的命 ...

  3. ansible 模块

    1. #vim /etc/ansible/yaml/back.yml - hosts: siyi tasks: - name: "yum rsync" yum: name=rsyn ...

  4. ajax属性详解

    https://blog.csdn.net/mooncom/article/details/52402836 资料库: $.ajaxSetup()方法为将来的ajax请求设置默认值. http://w ...

  5. JavaScript判断是否为微信浏览器或支付宝浏览器

    可以用手机安装的微信和支付宝扫描下方二维码测试 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  6. 用ES6创建一个简单工厂模式

    1 什么是工厂模式? 工厂模式是用来创建对象的一种最常用的设计模式.我们不暴露创建对象的具体逻辑,而是将将逻辑封装在一个函数中,那么这个函数就可以被视为一个工厂.工厂模式根据抽象程度的不同可以分为:简 ...

  7. C#进行回文检测,判断字符串是否是回文的代码

    下面代码内容是关于C#进行回文检测,判断字符串是否是回文的代码,应该是对各位朋友有些好处. Console.WriteLine("算法1:请输入一个字符串!");string st ...

  8. MT【325】垂心的向量形式

    设$H$为垂心,且$3\overrightarrow{HA}+4\overrightarrow {HB}+5\overrightarrow {HC}=\overrightarrow 0$,则$\cos ...

  9. 你需要Mobx还是Redux?

    在过去一年,越来越多的项目继续或者开始使用React和Redux开发,这是目前前端业内很普遍的一种前端项目解决方案,但是随着开发项目越来越多,越来越多样化时,个人又有了不同的感受和想法.是不是因为已经 ...

  10. Nacos集群环境的搭建与配置

    Nacos集群环境的搭建与配置 集群搭建 一.环境: 服务器环境:CENTOS-7.4-64位 三台服务器IP:192.168.102.57:8848,192.168.102.59:8848,192. ...