//面向过程

//类和对象
//对象:任何东西都可以成为对象,类实例化出来的东西
//类:对所有同类的对象抽象出来的东西 //info:code,name,sex,nation,birthday
//对象:一条具体的信息:p001,张丹,女,汉,1990-12-04 //定义类
class Ren
{
public static $class;
private $Name; //成员变量
private $age;
private $height;
var $sex;//一般不要给成员变量赋值
const π=3.1425926;//将某些类里面常用的 定义为常量 static function test()//静态方法
{
echo self::$class;
echo "静态方法";
}
function __construct($s)
{
$this->sex= $s;
} function Run()//成员函数(方法)
{
echo "这个人正在奔跑";
}
function Say()
{
echo self::$class;
//echo $Name."正在说话";//错误写法
echo $this->Name."正在说话";//正确写法,$this表示该对象
}
function __destruct()//析构函数,对象销毁前执行
{
echo "该对象销毁了";
}
/*function SetAge($a)
{
if($a>10 && $a<50)
{
$this->age=$a;
}
}
function GetAge($a)
{
if($a>10 && $a<50)
{
$this->age=$a;
}
}*/ function __set($name,$value) //对类里面的私有成员进行赋值的魔术方法
{
$this-> $name=$value;
if($name=="age" && $value>20 && $value<50)
{
$this->age=$a;
} }
function __get($Name) //对类里面的私有成员进行取值的魔术方法
{
return $this->$Name;
}
}
//使用类
//1.实例化对象
$r=new Ren("男");
//2.给成员变量赋值(调用成员变量)
$r->Name='张良';//给对象的name赋值
//var_dump($r);
//3.调用成员方法
$r->Run();//执行成员方法
//访问修饰符
//1.如果要加访问修饰符,要去掉var
//2.三种:public公有的,protected受保护的,private私有的
//3.如果不加访问修饰符,默认是共有的 //$this引用
$r->Say();
//$this表示该对象(哪个对象调用) ,不是代表该类 //构造函数
//function__construct()
//{
//}
//1,写法特殊
//2.执行特殊,再造对象时自动执行
//作用:对对象做初始化操作 //面向对象三大特性
//封装,让类更加安全
//做法:1.把成员变量变成私有的
//2.做一个方法来实现变量的取值和赋值,加一些限制条件
$r->SetAge(40);
//取age值的方法
echo $r->GetAge();
//使用魔术方法
$r->name ="李思";//执行该语句会自动调用__set方法
//__set() 特点:会自动执行,把赋值语句中的变量名作为第一个参数,把变量值作为第二个参数调用__set方法
//__get() 特点:会自动执行,把取值语句中的变量名作为参数调用__get方法 //继承
//概念:如果一个类有子类,那么该子类会继承父类的一切东西(不包括私有成员)
//在定义子类的时候需要加一个关键字 extends
//特点:单继承,一个儿子只能有一个父亲,一个类只能一个父类
//如果父类中有构造函数,子类在实例化的时候要按父类构造函数的标准来实例化
//子类对父类的方法的重写,在子类里写一个同样的方法
//final:用来修饰类,代表该类是一个最终类,该类无法被继承
class Test extends Ren
{ public $birthday;
function Run()
{
echo "running";
}
function Say()
{
parent::Say();//调用父类的Say()方法,parent只能在子类中使用
echo "saying";
}
} $t=new Test("女");
$t->__get();
$t->Say();
//静态成员
//普通成员是属于对象的,不是属于类的 (调用的时候是用对象调用)
//什么叫静态的:类静态成员是属于类的,不是属于每个对象的
//定义静态成员用static关键词修饰
//静态方法里面不能调用普通成员
//静态方法调用静态成员,要使用self关键词
//self表示该类 $this表示该对象
//普通方法里面可以调用静态成员
Ren::$class="0305";//访问静态成员
echo Ren::$class="0305"; //多态
//概念:当父类引用指向子类实例的时候,由于子类对父类函数进行了重置,导致我们在使用该引用去调用相应的方法表现出的不同
//条件:必须有继承
//2.子类必须对父类的方法进行重写 class Rene
{
public $name;
public $sex;
function Say()
{
echo "你好a ";
}
function Say($a)
{
echo $a."你好a ";
}
function Say($a,$b)
{
echo $a.$b."你好a ";
}
function __tostring()//输出类的描述
{
return "这个对象包括变量name和sex,一个say方法";
}
function __clone()//克隆对象时自动执行
{
$this->name="事发后";//this 指副本 (克隆出来的新对象)
}
}
class China extends Rene
{
function Say()
{
echo "你好";
}
} $q=new Rene();
$q1=new China(); //函数重载
//2.函数里面参数的个数不同
//3.如果个数相同,类型不同
$r=new Rene();
$r->Say(); //PHP是弱类型语言,所以没有重载
//PHP有可变参数的函数 //__tostring() //对象的克隆
$r=new Rene();
$r->name="福建"; $r1=clone $r;//克隆对象
echo $r->name;
echo $r1->name; var_dump($r1); ?>

PHP 对象及其三大特性的更多相关文章

  1. OC学习6——面相对象的三大特性

    我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这也是面向对象的三大特征.OC学习篇之---类的三大特性(封装,继承,多态) 1.封装(Encapsulation)是指将对象的状态信息 ...

  2. 浅谈python的对象的三大特性之继承

    前面我们定义了人的类,并用这个类实例化出两个人jack和lily,查看了它们的内存空间. 现在我们再来看看类中所存在的对向对象编程的三大特性之继承的一些特性. 前面定义了一个人的类,可是我们还知道,人 ...

  3. python面向对象(类和对象及三大特性)

    类和对象是什么 创建类 新式类 和 经典类 面向对象三大特性 继承 封装 多态   面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  4. IOS开发学习笔记010-面向对象的三大特性

    面向对象的三大特性 1.封装 2.继承 3.多态 一.封装 将类内部的属性保护起来,在外部不能直接访问,那么如果需要访问怎么办呢? OC提供了set方法来对成员变量进行访问 set方法 1.作用:提供 ...

  5. python学习之对象的三大特性

    在面向对象程序设计中,对象可以看做是数据(特性)以及由一系列可以存取.操作这些数据的方法所组成的集合.编写代码时,我们可以将所有功能都写在一个文件里,这样也是可行的,但是这样不利于代码的维护,你总不希 ...

  6. 对象的三大特性(封装、继承、多态)——java

    一. 面向对象的三大特征 1. 封装---->减少了大量的冗余代码---->封装将复杂的功能封装起来,对外开放一个接口,简单调用即可.将描述事物的数据和操作封装在一起,形成一个类:被封装的 ...

  7. 浅谈python的对象的三大特性之封装

    我们家里都有电视机,从开机,浏览节目,换台到关机,我们不需要知道电视机里面的具体细节,只需要在用的时候按下遥控器就可以完成操作,这就是功能的封装. 在用支付宝进行付款的时候,只需要在用的时候把二唯码给 ...

  8. Python:Day24 类、类的三大特性

    Python有两种编程方式:函数式+面向对象 函数式编程可以做所有的事情,但是否合适? 面向对象: 一.定义 函数: def + 函数名(参数) 面象对象: class  bar--->  名字 ...

  9. Java面向对象——三大特性

    Java面向对象——三大特性 摘要:本文主要介绍了面型对象的三大特性. 封装 什么是封装 封装,就是指一个类隐藏了对象的属性和实现细节,对自己的数据和方法进行访问权限控制,只允许某些类和对象进行访问和 ...

随机推荐

  1. 23、获取app所占据的内存

    public static void getRunningAppProcessInfo(ActivityManager mActivityManager) { //ActivityManager mA ...

  2. java笔记之变量的存储方式

    1.java变量存储域 java变量的存储区域主要放在以下几个地方: (1)寄存器:可以说是最快的存储区,在C/C++中可以声明寄存器变量,但是在java中不能声明寄存器变量,只是编译器在编译时确定. ...

  3. UIlabel 显示模糊

    问题: 今天遇到连续两个label一个显示的比较清楚,比较锐利,而另一个对比下有点模糊. 原因: 在使用UILabel等继承于UIView的控件时,如果frame的rect不是整数的情况下,就会显示起 ...

  4. 创建REST服务应用程序

    Web服务类别有两种,一种是基于SOAP协议的服务,另一种是基于HTTP协议的REST架构风格的服务.REST服务的数据格式有两种:XML 和 JSON,REST服务已被大量应用于移动互联网中. 本文 ...

  5. Leetcode#145 Binary Tree Postorder Traversal

    原题地址 递归写法谁都会,看看非递归写法. 对于二叉树的前序和中序遍历的非递归写法都很简单,只需要一个最普通的栈即可实现,唯独后续遍历有点麻烦,如果不借助额外变量没法记住究竟遍历了几个儿子.所以,最直 ...

  6. 第一个 bat 文件

    要写一个批处理命令 转换场景数据 包括从文件里读入 每一行信息是一个要转换的场景名字 可以拼出路径 到指定路径 执行命令 http://blog.csdn.net/mfx1986/article/de ...

  7. mysql存储过程和函数使用实例

    1.需求:根据输入的年份,月份,和当前系统的年份比较,不满1年按1年计算,多出1年11个月也按1年计算. 2.计算得出来的使用年份,计算车辆残值. 3.存储过程 DELIMITER $$ USE `d ...

  8. Ogre1.8.1源码编译

    本文的编译环境为Windows7_SP1 + VS2010_SP1 + CMake2.8.11   :) 资源下载 1. 下载Ogre1.8.1的源代码,下载链接地址:http://www.ogre3 ...

  9. http status 汇总

    http status 汇总 常见HTTP状态码 200 OK 301 Moved Permanently 302 Found 304 Not Modified 307 Temporary Redir ...

  10. 10个免费开源的JS音乐播放器插件

    点这里 音乐播放器在网页设计中有时候会用到,比如一些时尚类.音乐或影视类等项目,但这些 网页播放器 插件比较少见,所以这里为大家整理一个集合,也许会有用到的时候. 下面整理的播放器有些是支持自适应的, ...