php类和对象(一)
对象:任何东西都可以称为对象,类实例化出来的东西
类:对所有同类的对象抽象出来的东西
Info: Code,Name,Sex,Nation,Birthday
对象:一条具体的信息 p001 张三 男 汉族 1990-2-3
定义类:
class Ren
{
public $Name; //成员变量
protected $age;
private $height;
var $sex; //一般不要给成员变量赋值 function __construct($s) //构造函数
{
$this->sex = $s;
}
function __destruct() //析构函数,对象销毁前执行
{
echo "该对象销毁了!";
} function Run() //成员函数(方法)
{
echo "这个人正在奔跑!";
}
function Say()
{
echo $this->Name."正在说话!";
}
}
//使用类
//1.实例化对象
$r = new Ren("男");
//2.给成员变量赋值(调用成员变量)
$r->Name = '张三'; //给对象的Name赋值
echo $r->age; var_dump($r);
//3.调用成员方法
$r->Run();
$r->Say(); //执行成员方法 //访问修饰符
//1.如果要加访问修饰符,需要去掉var
//2.三种:public公有的 protected受保护的 private私有的
//3.如果不加访问修饰符,默认是public //$this引用
//$this代表该对象(哪个对象调用),不是代表该类 //构造函数
//1.写法特殊:__construct(),双下划线
//2.执行特殊:在造对象的时候最先执行
//作用:对对象进行初始化操作
面向对象三大特性: 封装,继承,多态
1.封装
目的:让类更加安全,不让外界直接访问类里面的成员变量
做法:1.把成员变量做成私有的
2.做一个方法来实现变量取值或赋值,在方法里面加限制条件
class Ren
{
private $name;
private $sex;
private $age;
function SetAge($a) //给age赋值的函数
{
if($a>10 && $a<50)
{
$this->age = $a;
}
}
function GetAge() //取age的值
{
return $this->age;
}
}
$r = new Ren("男");
$r->SetAge(40); echo $r->GetAge();
使用类里面提供的魔术方法也可以实现对私有成员的操作
__set()特点:会自动执行,把赋值语句中的变量名作为第一个参数,把变量值作为第二个参数调用__set方法
__get()特点:会自动执行,把取值语句中的变量名作为参数调用__get方法
function __set($name,$value) //对类里面的私有成员进行赋值的魔术方法
{
if($name == "age")
{
if($value>20 && $value<50)
{
$this->$name = $value;
}
}
else
{
$this->$name = $value;
}
} function __get($name) //对类里面的私有成员进行取值的魔术方法
{
return $this->$name;
}
$r->__set("name","张三");
$r->name = "李四"; //执行该语句会自动调用__set方法
$r->sex = "女";
$r->age = 40;
var_dump($r);
echo $r->__get(age);
2.继承
如果要继承,就必须有子类
概念: 如果一个类有子类,那么该子类会继承父类的一切东西(私有的成员访问不到)
做法: 在定义子类的时候需加一个关键字 extends
特点: 单继承,一个儿子只能有一个父亲,一个类只能有一个父类
如果父类中有构造函数,那么子类在实例化的时候需要依照父类构造函数的标准来实例化
子类对父类方法的重写: 在子类中写一个同样的方法
final: 用来修饰类,代表该类是一个最终类,该类无法被继承
class Test extends Ren //Test是Ren的子类
{
public $birthday; //子类可以加入自己的东西
function run()
{
echo "run";
}
function Say()
{
parent::Say(); //调用父类的Say()方法 parent双冒号,只能在子类中使用
echo " Test say";
}
}
$t= new Test("女");
$t->code ="p001";
var_dump($t);
$t->Say(); //子类对父类方法的重写
静态成员
类里面的普通成员是属于对象的,不是属于类的(调用的时候使用对象调用)
什么是静态的: 类静态成员是属于类的,不是属于每个对象的
定义静态成员用关键字static
静态方法里面无法调用普通成员
静态方法可以调用静态成员,使用self关键字调用
self代表该类用::调用,$this代表该对象,用->调用
class Ren
{
const π=3.1415926; //将某些类里面常用到的东西定义为常量, 关键字const
public static $class; //static关键字是定义静态的
public $code;
private $name;
private $sex;
private $age; function __construct($s)
{
$this->sex = $s;
}
public function Say()
{
echo self::$class; //普通方法可以调用静态成员
echo "hello";
} static function Test() //静态方法
{
echo self::$class; //调用自身类里面的静态成员
echo "静态方法!";
}
}
$r =new Ren("女");
Ren::$class = "0305";
echo Ren::$class; //访问静态成员用双冒号
Ren::Test();
$r->Say();
子类中也可以用静态成员与静态方法:
class Test extends Ren //Test是Ren的子类
{
public $birthday; //子类可以加入自己的东西
public static $shengao;
function run()
{
echo "run";
}
function Say()
{
parent::Say(); //调用父类的Say()方法 parent双冒号,只能在子类中使用
echo " Test say";
}
static function aa()
{
echo "子类中能用静态方法吗?";
}
}
$t= new Test("女");
Test::$shengao ="170";
echo Test::$shengao;
Test::aa();
php类和对象(一)的更多相关文章
- Java编程里的类和对象
像我们搞计算机这块的,都知道这么一件事,当前的计算机编程语言主要分为两大块,一为面向过程,二为面向对象.Java就是一门纯面向对象的语言.学习了一个月左右的Java,在下对于Java当中的类和对象有了 ...
- Python - 类与对象的方法
类与对象的方法
- C++基础知识(5)---类和对象
终于把C++中的基础在前面的几篇博客中总结完了,可能还有一些语法还没有总结到,没关系,以后用到了再查资料就好.类是C++中的一个非常重要的概念,这是区别你使用的C++到底是面向过程还是面向对象的一个重 ...
- 简述JavaScript对象、数组对象与类数组对象
问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ...
- 前端学PHP之面向对象系列第一篇——类和对象
× 目录 [1]类 [2]成员属性[3]成员方法[4]对象[5]成员访问[6]this 前面的话 面向对象程序设计(OOP)是一种计算机编程架构.计算机程序由单个能够起到子程序作用的单元或对象组成,为 ...
- Objective-C Runtime 运行时之一:类与对象
Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...
- [Java入门笔记] 面向对象编程基础(一):类和对象
什么是面向对象编程? 我们先来看看几个概念: 面向过程程序设计 面向过程,是根据事情发展的步骤,按进行的顺序过程划分,面向过程其实是最为实际的一种思考方式,可以说面向过程是一种基础的方法,它考虑的是实 ...
- 解析Java类和对象的初始化过程
类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来 ...
- 02OC的类和对象
这章重点介绍OC的类以及对象,由于C语言是面向过程语言,而OC只是对于C语言多了一些面向对象的特性,所以OC相对于其他面向对象语言,例如C#.Java等没有那么多的语法特性,所以差别还是比较大的. 一 ...
- swift基础:第六部分:类与对象
http://reactnative.cn/docs/0.24/getting-started.html#content(react Native 开发文档) 互联网这个时代,你松懈一天,就会有很多很 ...
随机推荐
- STL学习笔记(string)
动机 C++标准程序库中的string class使我们可以将string当做一个一般型别.我们可以像对待基本型别那样地复制.赋值和比较string, 再也不必但系内存是否足够.占用的内存实际长度等问 ...
- Rosbridge 的使用
参考文献: http://rosclub.cn/post-569.html ROS与Android的窃窃私语 1.简介 ROSbridge 顾名思义,是一个ROS当中的中间件,ROS 桥,是用 ...
- Iocomp控件教程之LinearGauge--线性刻度尺控件
线性刻度尺-线性刻度尺控件(LinearGauge)是一个具有线性表达式刻度的图像控件.支持多达5种颜色断面和4种指示器样式,相同功能,查看线性对数刻度尺(Linear Log Gauge)控件内容 ...
- Linux下基于命令行的抓包方法
大家可能都已经对著名的抓包工具Ethereal比较熟悉了,这里再介绍一种基于命令行的抓包工具tcpdump. 举例:抓本机1813端口上的数据,并将抓包结果保存在test.cap文件中 然后在本地可以 ...
- Dictionary及KeyValuePair使用
/// <summary> /// 除去数组中的空值和签名参数并以字母a到z的顺序排序 /// </summary> /// <param name="dicA ...
- 莫小安 CentOS7使用firewalld打开关闭防火墙与端口
1.firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld 停止: systemctl disab ...
- angularjs中的时间格式化过滤
本地化日期格式化: ({{ today | date:'medium' }})Nov 19, 2015 3:57:48 PM ({{ today | date:'short' }})11/19/15 ...
- ACM算法整理(不断补充ing)
动态规划 1.背包问题 (1)01背包 ,n) DFR(v,V,C[i]) F[v]=max(F[v],F[v-C[i]]+W[i]); } //初始化时 //若背包不一定装满F全初始化为0 //若装 ...
- Android採用async框架实现文件上传
页面效果 须要的权限 <uses-permission android:name="android.permission.INTERNET"/> 网络訪问权限; 布局文 ...
- lua 中处理cocos2dx 的button 事件
lua 中处理cocos2dx 的button 事件 2014-05-08 09:44:32| 分类: lua |举报 |字号 订阅 1.引入这个类:require "GuiConst ...