面向对象

概念:按类进行分类,类是表示彼此之间可能互不相同,但是具有一些共同点的对象集合
多态性:不同的类对同一操作可以有不同的行为
继承:允许我们使用子类在类之间创建层次关系
类
关键字:class
结构 :class classname{ }
作用域关键字:public、private、protected
构造函数:初始化(___construct($params))
析构函数:与构造函数相对。在所有该类的引用都会被重置或超出作用域时自动发生(__destruct)
类的实例化:new
class main{
function __construct($params)
{
echo $params;
}
} $a=new main("123"); //输出123
$b=new main(); //输出空
ps:___construct要跟new 带的参数一致
通过函数来实现对属性的访问:
__set:当外部无法访问某个类变量时,通过该方法设置值
__get:当外部无法访问某个类变量时,通过该方法获取值
class main{
private $name;
private $age;
public function __construct($name="",$age=18)
{
$this->name=$name;
$this->age=$age;
} function __get($name)
{
// TODO: Implement __get() method.
return $this->$name;
}
function __set($name, $value)
{
// TODO: Implement __set() method.
$this->name=$value;
}
function say(){
echo $this->name.$this->age;
}
} $a=new main("cmf",18);
$a->name="hello"; //如果没有__set,则会出错
echo $a->age; //如果没有__get,则会出错
使用private和public关键字控制访问
  • 默认是public
  • public:公有属性。类的内部和外部都可以访问
  • private:私有属性。只能在类的内部访问。使用__set\__get可以在外部使用该属性
  • protected:只能在内部使用

继承

关键字:extends
ps:继承是单方向的。子类可以从父类或超类继承特性(public、protected)
通过private和protected访问修饰符来控制需要继承的内容
  • public:公有属性,继承类外部和内部都可以使用
  • private:无法被子类继承(方法和属性)
  • protected:被继承,只能在子类内部用,在外部无法使用
class main{
public $name;
private $age;
protected $money;
protected function say(){
echo "say";
}
private function run(){
echo "run";
}
public function hair(){
echo "hair";
}
}
class test extends main{
function __construct()
{
this->name="test";
$this->age=18; //致命错误,无法继承
$this->money="more and more";
$this->say();
$this->run(); //致命错误
$this->hair();
}
}
$cmf=new test();
重载:重新定义父类的属性及方法
class a{
public $attribute="a";
function oreration(){
echo $this->attribute;
}
}
class b extends a{
public $attribute="b";
function oreration()
{
parent::oreration(); //输出b
echo "hello";
}
}
$b=new b();
$b->oreration();
禁止继承和重载:final
class a{
public $attribute="a";
final function oreration(){
echo $this->attribute;
}
}
class b extends a{
public $attribute="b";
function oreration(){} //致命错误,无法重载final的方法
}
实现接口:可以解决多重继承的问题,一个类可以继承一个类,但是可以实现一个或多个接口
interface Displayable{
function say(); //没有花括号
}
class test implements Displayable{
function say() //如果没有实现接口中的制定方法,会发生致命错误
{
echo "hello";
}
}
静态方法及per-class常量
  • 在没有实例化类的情况下可以访问
  • 在一个静态方法中,不能使用this关键字
class Math{
const pi=3.14159;
static function squared($input){
$this->name='123'; //致命错误
return $input*$input;
}
}
echo Math::pi; //输出3.14159
echo Math::squared(8); //输出64
检查类的类型和类型提示:instanceof
  • 检查一个对象是否为特定类的实例
interface a{
function say();
}
class aa implements a{
function say(){}
}
class bb {}
$aa=new aa();
$bb=new bb();
echo $aa instanceof a; //true
echo $bb instanceof a; //false
克隆对象:clone
  • 复制一个已有的对象
  • 如果不需要克隆过来的默认属性,可以在基类中创建一个__clone()方法
抽象类:
abstract class a{
abstract function func($param1,$param2);
}
重载方法:__call
  • 必须带2个参数,一个方法名称,一个参数
/**
* __call方法是调用不可见(无权限或不存在)的方法时,自动调用
* $aa->hello(123);
* 没有hello方法,调用call("hello",'123')
*/
class a{
public function __call($name, $arguments)
{
echo '你想调用我不存在的方法', $name, '方法';
echo '还传了一个参数';
print_r($arguments);
}
}
$aa=new a();
$aa->hello(123); //输出:你想调用我不存在的方法hello方法还传了一个参数Array ( [0] => 123 )
实现迭代器和迭代
  • 通过forrach方法循环取出一个对象的所有属性
class myclass{
public $a=5;
public $aa=55;
public $aaa=555;
public function hello{
echo "hello"; //致命错误 ,只能取属性
}
}
$x=new myclass();
foreach ($x as $attribute){
echo $attribute."<br/>";
}
将类转换成字符串:__toStirng
class test{
public $foo="hello";
public function __toString()
{
return(var_export($this,true)); //输出所有的属性
// return $this->foo;
}
}
$a=new test();
echo $a; //输出test::__set_state(array( 'foo' => 'hello', );
 

【五】php 面向对象的更多相关文章

  1. Selenium WebDriver + Grid2 + RSpec之旅(五)---面向对象设计用例

    Selenium WebDriver + Grid2 + RSpec之旅(五) ----面向对象设计用例 前几节讲了怎么一步一步的从零开始到编写出一个简单的测试用例,这一节将要讲一下怎么让测试用例变得 ...

  2. JavaSE (五)面向对象 -- 概述

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 目录 一.面向对象的主线 二.面向对象 VS 面向过程 三 . java最基本的两个要素 - 类和对象 ...

  3. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  4. Py修行路 python基础 (十五)面向对象编程 继承 组合 接口和抽象类

    一.前提回忆: 1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均 ...

  5. Java成长第五集--面向对象设计的五大原则

    S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则(Programming Priciple)的首字母缩写.以下图说明: 下面就个人的理解来说说这五大原则的含义到 ...

  6. 零基础学Java第五节(面向对象一)

    本篇文章是<零基础学Java>专栏的第五篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! 本文章首发于公众号[编程攻略] 类与对象 在哲学体系中,可以分为主 ...

  7. python学习第十五天 -面向对象之继承和多态

    大家都知道面向对象的三大特性:封装,继承,多态.封装特性在上一章节已经讲解过.这一章节主要讲解继承和多态. 继承: 当定义一个类的时候,可以从现有的类进行继承.那么新定义的类可以称为子类,被继承的现有 ...

  8. python笔记十五(面向对象及其特性)

    一.面向对象: class(类):一类拥有共同属性对象的抽象:定义了这些对象的属性和方法object(对象):是一个类实例化后的实例,类必须经过实例化才可以在程序中调用: 由于之前学习过java,对类 ...

  9. guxh的python笔记五:面向对象

    1,面向对象编程思想 类:一类具有相同属性的抽象 属性(静态属性):实例变量.类变量.私有属性 方法(动态属性):构造函数.析构函数(默认就有).函数.私有函数 对象/实例:类经过实例化后,就是对象/ ...

  10. 从零开始学 Web 之 JavaScript(五)面向对象

    大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程.此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注.在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识 ...

随机推荐

  1. 51Nod 1433 0和5

    小K手中有n张牌,每张牌上有一个一位数的数,这个字数不是0就是5.小K从这些牌在抽出任意张(不能抽0张),排成一行这样就组成了一个数.使得这个数尽可能大,而且可以被90整除. 注意: 1.这个数没有前 ...

  2. Android几种解析XML方式的比较

    https://blog.csdn.net/isee361820238/article/details/52371342 一.使用SAX解析XML SAX(Simple API for XML) 使用 ...

  3. Introduction to the Standard Directory Layout

    Having a common directory layout would allow for users familiar with one Maven project to immediatel ...

  4. P2147 [SDOI2008]洞穴勘测(LCT)

    P2147 [SDOI2008]洞穴勘测 裸的LCT. #include<iostream> #include<cstdio> #include<cstring> ...

  5. 02: git分支管理

    目录:GIT其他篇 01: git & github 02: git分支管理 目录: 1.1 Git常用命令 1.2 主要分支(保护分支) 1.3 特性分支:feature (开发分支合并到d ...

  6. body-parser 用法

    1.下载 body-parser 模块  :   npm install body-parser 2.require body-parser 模块(引入),并用一个变量接收(此处栗子变量为 bodyp ...

  7. 【python003-变量】

    变量 一.在使用变量之前,需要先对其进行赋值 二.变量命名的规则:可以包含字母,数字,下划线,但是不能以数字开头 三.字符串: 1.引号内的一切东西 2.python的字符串是要在两边加上引号,对于单 ...

  8. Spring 学习——Bean容器

    Bean容器初始化 基础 org.springframework.beans org.springframework.context BeanFactory提供配置结构和基本功能,加载并初始化Bean ...

  9. OpenWRT路由器使用ipv6拨号上网教程

    文章来源于群友,如有侵权,请联系我(aha971030@gmail.com)删除 原理介绍分析: 湖北E信地区可以使用ipv6拨号,好处是网络是上下对等不限速网络,也就是说,你的端口上限是多少,网上就 ...

  10. hihoCoder week3 KMP算法

    题目链接 https://hihocoder.com/contest/hiho3/problems kmp算法 #include <bits/stdc++.h> using namespa ...