前言

以前写C++最多,大二课上学过Java。现在也差不多还给老师了。现在决定针对php重新梳理一遍,夯实基础,设计模式学起来应该会更加得心应手吧。

介绍

对象作为数据和功能代码的集合,是程序开发和代码从用的基本单位。

对象元素

访问方法或属性

  • $object->propertyname

    $object->methodname ([arg........])

访问标识符

类,方法,属性

  • public 可以从外部访问(未定义,默认为public)
  • private 只能在内部访问
  • protected 只能被对象自身的方法或者继承他的子类方法访问
  • 对象被创建后,就会通过引用传参,而不是复制整个对象。复制整个对象可以用clone关键字

方法,属性

  • static 通过类来调用,而不是对象,这种方法不能访问对象的属性

    HTML::p("hello world!!!"); //调用html类中的静态方法p()

  • final 子类无法重写final方法

    补充$this->是当前对象的引用,指向方法所属的对象 (static方法会失效)

常量

  • define() 全局常量
  • const 内部常量

类的特性

继承(extends)

  • parent::method ( ) ------------- 调用父类中被重写的方法
  • self:: method() -------------- 调用子类中方法

接口(implements)

  • 提供了定义一个类所遵循的规则的途径,提供了类的方法原型和常量,实现该接口的类必须提供接口中所有方法的具体实现
  • 接口可以继承于其他多个接口,只要他继承的接口声明的方法和子接口中的方法不重名。
  • 语法:
      interface interfacename{
[function functionname();
......
]
} class classname implements interfacename{
......
}

特征(trait)

  • 允许在不需要创建一个父类的情况下,便可以在不同层次结构的类中复用类外部的代码
  • 语法:
      trait Logger{
pubilc log ($logString){
$className = __CLASS__;
echo "[{$className}]{$logString}";
}
} class User {
use Logger;
public $name;
function __construct($name=''){
$this->name = $name;
$this->log("Created user '{$this->name}'");
}
} $user = new User('Alex'); // [User] Created user 'Alex'
//Logger方法是一个trait, 在UserGroup类实例中是可访问的,就像在类内部定义的方法一样
//trait也可以同时使用多个 ------- use trait1, trait2,.......

一个方法中使用多个trait,方法名有可能冲突:

      trait Command{
function run(){
......
}
} trait Marathon{
function run(){
......
}
} class Person{
use Command, Marathon{
Marathom::run instreadof Conmand; //用Marathon中的run方法,覆盖Command的run方法
}
} class Person2{
use Command, Marathon{
Command::run as runCommand; //Command中run方法命名为runCommand
Marathon::run instreadof Command; //覆盖掉Command中run方法
}
}

抽象类(abstract)

  • 父类中只提供方法名,没有具体实现,子类中必须实现父类中的抽象方法,trait中有抽象方法的话,也必须在子类中实现。(抽象类中可能有实现过的函数)
  • 抽象类不可以实例化

函数

构造函数

  • 用来在实例化类的时候初始化类对象的特殊函数
  • php不支持构造函数链的自动调用,可以手动在子类构造函数中显式的调用父类构造函数
  • 语法:
      function __construct() {
......
}

析构函数

  • 在对象被销毁时(一个对象的最后一个引用被删除),或者脚本执行结束时,被调用来收回对象的资源。
  • 语法:
      function __destruct() {
......
}

Php对象及对象特性篇的更多相关文章

  1. PHP 对象及其三大特性

    //面向过程 //类和对象 //对象:任何东西都可以成为对象,类实例化出来的东西 //类:对所有同类的对象抽象出来的东西 //info:code,name,sex,nation,birthday // ...

  2. JavaScript之面向对象的概念,对象属性和对象属性的特性简介

    一.大家都知道,面向对象语言有一个标志,那就是他们都有类的概念,通过类我们可以创建任意多个具有相同属性和方法的对象.但ECMAScript(指定JavaScript标准的机构,也就是说JavaScri ...

  3. JavaScript高级 面向对象(11)--对象的动态特性-关联数组用法

    说明(2017.4.2): 1. 对象的动态特性: (1)在js中,一个对象需要属性,就可以利用“对象名.属性 = 值”的方式为其添加,只要赋值成功,对象就新增这个属性. (2)对象属性的访问形式: ...

  4. js中对象的一些特性,JSON,scroll家族

    一.js中对象的一些特性 对象的动态特性 1.当对象有这个属性时,会对属性的值重写 2.当对象没有这个属性时,会为对象创建一个新属性,并赋值 获得对象的属性的方式 为元素设置DOM0级事件 二.JSO ...

  5. js知识梳理1:理解对象的属性特性

    1.数据属性 数据属性的4个特性: Configurable:①表示能否通过delete删除属性从而重新定义,②能否修改属性的特性,③能否把属性修改为访问器属性.对象直接量里默认值true. Enum ...

  6. JavaScript 之 对象属性的特性 和defineProperty方法

    对象是无序属性的集合,而这些属性在创建是都带有一些特征值(可以理解为属性的属性,天生自带的),这些特征值是为了实现JavaScript引擎用的,因此JavaScript不能直接访问. JavaScri ...

  7. python--面向对象之三个特性:封装、继承、多态

    一.面向对象简介 1.面向对象不是所有的情况都适用2.面向对象编程 a.定义类 class 类名: def 方法1(self, 参数名): 方法体 b.根据类创建对象,使用对象去执行类中的方法 obj ...

  8. python基础--面向对象基础(类与对象、对象之间的交互和组合、面向对象的命名空间、面向对象的三大特性等)

    python基础--面向对象 (1)面向过程VS面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. ...

  9. 【JVM第六篇--对象】对象的实例化、内存布局和访问定位

    写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记.其观看地址如下:尚硅谷2020最新版宋红康JVM教程 一.对象的实例化 在平常写代码的过程中,我们用class关键字定义的类只是一个类的模 ...

  10. 对象的可见性 - volatile篇

    作者:汤圆 个人博客:javalover.cc 前言 官人们好啊,我是汤圆,今天给大家带来的是<对象的可见性 - volatile篇>,希望有所帮助,谢谢 文章如果有误,希望大家可以指出, ...

随机推荐

  1. Linux随笔-鸟哥Linux基础篇学习总结(全)

    Linux随笔-鸟哥Linux基础篇学习总结(全) 修改Linux系统语系:LANG-en_US,如果我们想让系统默认的语系变成英文的话我们可以修改系统配置文件:/etc/sysconfig/i18n ...

  2. 最大流EK算法

    给定一个有向图G=(V,E),把图中的边看作 管道,每条边上有一个权值,表示该管道 的流量上限.给定源点s和汇点t,现在假设 在s处有一个水源,t处有一个蓄水池,问从 s到t的最大水流量是多少? 网络 ...

  3. target!

    工作到现在也有8个月了,从学生时代想从事嵌入是开发,到工作中从事android开发,跨度还是比较大的:曾经想从事这些消费类电子产品的开发,想从一个用户变成一个生产者,但是真正进入到这一行之后,才知道在 ...

  4. stm32 USART使用标志

    在USART的发送端有2个寄存器,一个是程序可以看到的USART_DR寄存器,另一个是程序看不到的移位寄存器,对应USART数据发送有两个标志,一个是TXE=发送数据寄存器空,另一个是TC=发送结束. ...

  5. Python pip源,解决安装慢的问题

    经常在使用Python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样就能解决被墙导致的装不上库的 ...

  6. codeforces B. Calendar 解题报告

    题目链接:http://codeforces.com/problemset/problem/304/B 题目意思:给出两个日期,需要算出这两个日期之间有多少日. 细心模拟就可以了.特别要注意的是,两个 ...

  7. 让tomcat启动时,自动加载你的项目

    在tomcat-->conf-->serve.xml文件最后加上 <Context path="/atest" docBase="E:\Workspac ...

  8. WebRTC GitHub repo developer's guide

    WebRTC GitHub repo developer's guide https://github.com/LingyuCoder/SkyRTC-demo  WebRTC GitHub repo ...

  9. 2016.4.23浙江省赛(zoj3936 zoj3938 zoj3940 zoj3944 zoj3946 zoj3947 )

    A      Apples and Ideas Time Limit: 2 Seconds      Memory Limit: 65536 KB "If you have an apple ...

  10. HDU2147 kiki's game (SG表找规律)

    Recently kiki has nothing to do. While she is bored, an idea appears in his mind, she just playes th ...