前言

以前写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. 转载-jmeter进阶功能

    在这此对新版本jmeter的学习+温习的过程,发现了一些以前不知道的功能,所以,整理出来与大分享.本文内容如下. 如何使用英文界面的jmeter 如何使用镜像服务器 Jmeter分布式测试 启动Deb ...

  2. sendevent是使用

    按下: sendevent /dev/input/event4 1 254 1 sendevent /dev/input/event4 0 0 0 松开: sendevent /dev/input/e ...

  3. Java接口测试之使用有道翻译API

    写接口测试框架,找了有道翻译API来当测试数据 package com.httpGetTest; import java.beans.Encoder; import java.net.URLEncod ...

  4. 扩散(diffusion)和弥散(dispersion)有什么区别

    作者:谢易正链接:https://www.zhihu.com/question/23914350/answer/177359196来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  5. Android View中滚动相关

    方法   scrollTo: (内容的左上角)达到某个地点 scrollBy: 根据当前位置,再移动多少 属性:   mScrollX, 以下是文档解释   The offset, in pixels ...

  6. 值域线段树 (玲珑OJ 1117)

    点击打开题目链接 题目意思很简单: 1.插入x 2.把小于x的数变成x 3.把大于x的数变成x 4.求集合中第x小数 5.求集合中小于x的数个数 思路: 线段树,节点是值的分数,你可以离散,也可以不离 ...

  7. hdu-5734 Acperience(数学)

    题目链接: Acperience Time Limit: 4000/2000 MS (Java/Others)   Memory Limit: 65536/65536 K (Java/Others) ...

  8. springmvc配置一:ajax请求防止返回中文乱码配置说明

    Spring3.0 MVC @ResponseBody 的作用是把返回值直接写到HTTP response body里. Spring使用AnnotationMethodHandlerAdapter的 ...

  9. haproxy小结(一)基础概念篇

    HAProxy是法国人Willy Tarreau个人开发的一个开源软件,目标是应对客户端10000以上的同时连接,为后端应用服务器.数据库服务器提供高性能的负载均衡服务.HAproxy可以实现基于TC ...

  10. mac上Firefox安装firebug和firepath

    Firefox安装Selenium ide插件时提示:该附加组件无法安装 因为它似乎已损坏,如下图: 此时千万不要去想着这个插件有问题,可能是Firefox的版本问题. 在Firefox45之后的新版 ...