1、类

Class lio{

Public

Protect

Private

Function __constructor(){}

}

2、类的实例化

<?

php

class lio{

//定义属性,须要加权限修饰符

public $a="lveo";

//定义方法。须要加权限修饰符

public function running(){

echo 521;

}

public function lovea(){

echo "do something";

}

}

//类的实例化

$name=new lio();

//实例化对象的属性和方法訪问

echo $name->a;

$name->lovea();

?>

3、类的构造函数和析构函数

<?

php

class lio{

//定义属性,须要加权限修饰符

public $a="lveo";

//定义方法,须要加权限修饰符

public function running(){

echo 521;

}

public function lovea(){

echo "do something";

}

//不须要权限修饰符 public

function __construct($name){

echo "start";

//$this指实例化的对象

$this->name=$name;

}

function __destruct(){

echo "say goodBye";

}

}

//类的实例化

$name=new lio("sanmei ");

echo $name->name;

?>

4、析构函数

对象的赋值和引用,在对象$XXX=null;之后会产生不同结果

5、对象的继承(单继承)

<?php

class lio{

public $name='lio';

public $age=22;

//共同拥有方法

public function love(){

echo "love sanmei";

}

//不须要权限修饰符 public

function __construct($name){

echo "start\n";

//$this指实例化的对象

$this->name=$name;

}

}

//类son继承 lio

class son extends lio{

function __construct($name){

echo "$name".'1234';

}

}

//类的实例化

$name=new son("sanmei");

//继承中,使用父类的方法

$name->love();

?

>

6、訪问控制

Public  :共同拥有的类成员

Private : 私有的类成员

Protect : 受保护的,子类能够訪问

<?

php

class lio{

public $name='lio';

public $age=22;

//共同拥有方法

public function love(){

echo "love sanmei";

}

//protect

protected $pro="baohu";

//private

private $pri="siyoude";

//不须要权限修饰符 public

/* function __construct($name){

echo "start\n";

//$this指实例化的对象

$this->name=$name;

} */

}

//类son继承 lio

class son extends lio{

public $pub="pub";

public function getpri(){

echo $pri;

}

//protect

protected $pro="baohu";

//private

private $pri="siyoude";

/* function __construct($name){

echo "$name".'1234';

} */

}

//类的实例化

$name=new son("sanmei");

//public能够訪问

echo $name->pub;

//protect仅仅在子类中

//通过public function 实现调用private属性

$name->getpri();

//private 仅仅在本类中

echo $name->pri;//会报错

?>

<?php

class fa{

public $a=123;

protected $b=234;

private $c=345;

public function xie(){

echo $this->c;//必须通过$this 来訪问

}

}

class son extends fa{

function __construct(){

$this->xie();

}

}

$na=new fa();

$na->xie();

?>

7、Static 静态keyword

<?php

class fa{

public $a=123;

protected $b=234;

private $c=345;

public static $d="love you";

public function xie(){

echo $this->c;//必须通过$this 来訪问

}

public function ss(){

//在类中静态属性通过self来定义

echo self::$d;

}

public  static function dd(){

echo 1234;

}

}

class son extends fa{

function __construct(){

$this->xie();

}

//在子类中用parent来訪问 父类的静态变量

//echo parent::$d;

}

//在类外通过类名::直接訪问

echo fa::$d;

fa::dd();

//通过对象訪问

$na=new fa();

$na->xie();

$na->ss();

?

>

静态方法不能用$this来訪问

8、Final keyword,防止又一次赋值 重写

Fatal error: Cannot override final method bs::text() in D:\wamp\www\StudyObj\index.php on line 18

<?php

//假设类前加上final则该类不能被不论什么类继承的类,能够在class之前加入final

class bs{

final public $a=123;

public function a(){

echo 123;

}

//不能在子类中重写方法

final public function text(){

echo "1231321";

}

}

class son extends bs{

//重写,和父类一致的方法

public function a($temp='lio'){

echo $temp;

}

public function text(){

echo 2345;

}

}

$lio=new son();

$lio->a();

?>

9、数据訪问

重写过程中用parent::来訪问父类中的方法。常量不须要$

10、对象接口

<?php

//接口仅仅有方法声明

interface ss{

public function eat($food);

}

//继承接口的类必须实现方法体

class son{

public $a=123;

public function eat($food){

echo "lio eat".$food;

}

}

//继承接口的类必须实现方法体

class sonn{

public $a=123;

public function eat($food){

echo "lio drink".$food;

}

}

$lio=new son();

$li=new  sonn();

$lio->eat('nice');

$li->eat('water');

var_dump($li instanceof ss);

function check($obj){

if(var_dump($obj instanceof ss)){

$obj->eat('lio');

}else{

echo "cant eat";

}

}

能够用extends  实现接口继承接口

?>

11、多态

就是同一个接口,不同类去继承的时候,实现的方法体可能会不一样,这样就造成了多态。极大地提高了灵活性

传入对象不同。实现的方法不同

var_dump($li instanceof ss);

function check($obj){

if(var_dump($obj instanceof ss)){

$obj->eat('lio');

}else{

echo "cant eat";

}

}

12、抽象类

方法能够实现也能够不实现。间与接口和类之间

<?

php

//抽象类里的方法能够实现,抽象方法仅仅有声明。没有方法实现,非抽象方法能够有方法体

abstract class lio{

public $a=123;

public function name($name){

echo $name;

}

abstract public function aa(){

echo 132123;

}

}

class son extends lio{

function __construct(){

echo "start";

}

}

$name=new son();

$name->name('Lio');

?

>

13、魔术方法--- __tostring()和__invoke()

当成字符串输出时

<?php

class lio{

function __toString(){

//必须是return

return "12345";

}

}

$name=new lio();

echo $name;

?

>

当成方法时

<?php

class lio{

function __toString(){

//必须是return

return "12345";

}

function __invoke($temp){

echo $temp;

}

}

$name=new lio();

$name(5);

?>

14、魔术方法--- __call和__callStatic

<?php

class lio{

//重载

public function __call($name,$arguments){

echo "wo ai sanmei";

}

public static function __callstatic($name,$arguments){

echo "static wo ai sanmei";

}

}

$name=new lio();

$name->asd('lio','lio');

lio::res('lio','lio');

?

>

15、魔术方法--- __get()和__set()

<?php

class lio{

public function __get($name){

return "123123";

}

public function __set($name){

echo 123123123;

}

}

$name=new lio();

//就像定义了一样去使用

echo $name->time;

$name->time=1231312321313;

?

>

16、魔术方法--- __isset()和__unset()

属性的重载

17、魔术方法--- __clone()

<?php

class lio{

public $name=123;

function __clone(){

//在clone的时候不一样

$this->name="love you";

}

}

$name=new lio();

$name->name='aaaaa';

echo $name->name;

$san=clone $name;

echo $san->name;

$san->name='sssssss';

echo $san->name;

//使用lone初始化的name,在改变数据但不影响原对象

$mei=clone $name;

?>

PHP之面向对象学习的更多相关文章

  1. js面向对象学习 - 对象概念及创建对象

    原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...

  2. JavaScript之面向对象学习七(动态原型模式、寄生构造函数模式、稳妥构造函数模式创建自定义类型)

    一.动态原型模式 在面向对象学习六中的随笔中,了解到组合构造函数模式和原型模式创建的自定义类型可能最完善的!但是人无完人,代码亦是如此! 有其他oo语言经验的开发人员在看到独立的构造函数和原型时,很可 ...

  3. Python面向对象学习 1 (什么是面向对象,面向对象的应用场景,待更新)

    程序设计的三种基本结构: 面向对象,面向过程,函数式编程   1,什么是面向对象编程    面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就 ...

  4. Java面向对象学习目录

    Java面向对象学习目录 以下为面向对象学习目录,有待补充的部分,我还会再后续的学习过程中加以补充与修改~ 一.面向对象编程思想 二.Java类及类中成员 属性 方法 构造器 代码块 内部类 面向对象 ...

  5. (转)Python之路,Day6 - 面向对象学习

    本节内容:   面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法.     引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战> ...

  6. php面向对象学习

    近期跟着别人开发一套php程序,深感自己面向对象很白痴,于是再次巩固了一下面向对象的学习,自己整理了一下这几天面向对象的东西,给大家分享!! 面向对象的三大特性: 封装 -- 隐藏内部实现,稳定外部接 ...

  7. web进阶之jQuery操作DOM元素&&MySQL记录操作&&PHP面向对象学习笔记

    hi 保持学习数量和质量 1.jQuery操作DOM元素 ----使用attr()方法控制元素的属性 attr()方法的作用是设置或者返回元素的属性,其中attr(属性名)格式是获取元素属性名的值,a ...

  8. 深入js的面向对象学习篇——温故知新(一)

    在学习设计模式前必须要知道和掌握的***. 为类添加新方法: Function.prototype.method = function(name,fn) { this.prototype[name] ...

  9. js面向对象学习

    纯属笔记,加强记忆,不是教程,欢迎纠错,没有逻辑,不太适合学习使用. -------------- 继承多态等太多概念难以理解,还是从实践中慢慢学吧!争取能大致看懂网上的开源的代码. -------- ...

  10. python面向对象学习(二)基本语法

    目录 1. dir内置函数 2. 定义简单的类(只包含方法) 2.1 定义只包含方法的类 2.2 创建对象 2.3 编写第一个面向对象程序 3. 方法中的self参数 3.1 案例改造 -- 给对象添 ...

随机推荐

  1. thinkphp框架中使用递归实现无限级分类

    无限级分类在我们开发中显得举足轻重,会经常被人问到,而一般会用递归的方法来实现,但是递归又会难倒一批人.今天博主分享的这个稍微有点基础的phper都能学会,希望大家能喜欢. 一.先建立对应的数据库和表 ...

  2. i++ 和++i 的理解 以防面试

    根本原理: //模拟 a++ function afterAdd(){ var temp = a; a = a+1; return temp; } //模拟++a; function beforeAd ...

  3. 【Luogu】P4172水管局长(LCT)

    题目链接 有个结论是x到y的路径上最长边权值等于最小生成树上最长边权值,于是问题转化为最小生成树. 再考虑把问题反过来,删边变成加边. 于是变成动态维护最小生成树,LCT可以做到. #include& ...

  4. svg图片做图标字体

    https://icomoon.io 这个网站,把svg变图标

  5. SPOJ QTREE4 SPOJ Query on a tree IV

    You are given a tree (an acyclic undirected connected graph) with N nodes, and nodes numbered 1,2,3. ...

  6. jquery bind event, use on. $(document).on("click","#a",function(){alert(1)}) [#document]

    $(document).on("click","#a",function(){alert(1)}) [#document] as a replacement o ...

  7. java网络编程(二)

    客户端程序: package net; import java.io.OutputStream; import java.net.Socket; /** * Created by hu on 2015 ...

  8. 反射的基本使用以及原理(Class获取方式)

    1.什么是反射技术? 动态获取指定类以及类中的内容(成员),并运行其内容. 应用程序已经运行,无法在其中进行new对象的建立,就无法使用对象.这时可以根据配置文件的类全名去找对应的字节码文件,并加载进 ...

  9. Manjaro linux软件源设置

    1.从官方http://jaist.dl.sourceforge.net/project/manjarotest/16.06-dev/kde/minimal/manjaro-kde-minimal-1 ...

  10. [Oracle] Lock&Latch梳理

    Oracle lock&latch 1. 概述 4种锁机制 lock latch pin mutex 保证资源在并发访问和修改时不被破坏 锁类型 行为 持有时间 级别 保护类型 lock 队列 ...