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 开发文档) 互联网这个时代,你松懈一天,就会有很多很 ...
随机推荐
- 为什么要上大四???why
毕业证 即将要上大四了.近期一直在思考,毕业证对于我有什么作用呢?我从来不忌讳表露自己的观点.哪怕这个观点是错误的. 如今这个观点,想必又要激起无数人对我的责骂吧? 但是毕 ...
- 【Linux】使用xshell登陆时密码框为灰色,无法输入密码
使用xshell登陆时,出现以上情况,那么这到底值咋回事呢?经过查询以后发现是服务器端设置问题,解决办法如下: vi /etc/ssh/sshd_config 接着保存退出,然后重启sshd服务 se ...
- java中volatile关键字的含义(转)
在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语 ...
- Prometheus+Grafana搭建监控系统
之前在业务中遇到服务器负载过高问题,由于没有监控,一直没发现,直到业务方反馈网站打开速度慢,才发现问题.这样显得开发很被动.所以是时候搭建一套监控系统了. 由于是业余时间自己捯饬,所以神马业务层面的监 ...
- 浏览器登录cookie
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...
- MySQL查询优化程序
1.利用EXPLAIN 语句,查看是否用到索引: EXPLAIN 2.下面的WHERE 子句说明了怎样进行这项工作.第一行中,优化程序将简化表达式4/2 为值2,然后使用my_col 上的索引快速地找 ...
- 转载 【iOS开发】网页JS与OC交互(JavaScriptCore) OC ----->JS
目标 本文介绍利用苹果在iOS7时发布的JavaScriptCore.framework框架进行js与OC的交互.我们想要达到的目标是: OC调用网页上的js方法 网页js调用APP中的OC方法 ...
- hihoCoder#1037 : 数字三角形(DP)
[题目链接]:click here~~ 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 问题描写叙述 小Hi和小Ho在经历了螃蟹先生的任务之后被奖励了一次出国旅游的机会,于是他 ...
- 生成n个元素的全排列 C实现
近期在准备复习算法设计的考试,下边记录一些,看笔记时突然想到的解法. 问题是这种 用递归实现 n 个元素的全排列. 当时老师给出的解答是 假定第i个元素 ri 放在首位,于是 f(r1,r2,-,rn ...
- javascript中区分鼠标单击和拖动事件
在javascript中,一般的DOM元素如div,都有onmousedown.onmousemove.onmouseup这3个鼠标事件. <div id="div1" on ...