php 之 类,对象
--恢复内容结束---
一、类和对象:
1.定义:
对象:我们所见到的东西都可以称之为对象,是类实例化出来的东西
类:是对所有的同类对象抽象出来的东西
eg: 在一张表中记录了全班同学的学号,姓名,性别等信息,这张表可以称为类,而每个学生的具体信息则是对象。
2. 定义类:
class 类名称 //这里一般默认类的名称首字母大写
{
成员变量;
成员函数
}
eg: class Ren
{
var $name; //成员变量,一般不要赋值
var $age;
var $height;
var $sex;
function Run() //成员函数,又叫成员方法,是来完成对象的一些行为
{
echo "这个人正在奔跑";
}
}
3. 使用类:
3.1 实例化对象:
$r = new Ren()
3.2 给成员变量赋值,调用成员变量
$r->name='张三'; //给对象name赋值
$r->name; //调取name的值
4. 调用成员方法:
$r->Run(); //执行成员方法
5. 访问修饰符:
种类:1. public 公有的。
2. protected 受保护的。只能在这个累和他的子类里使用
3. private 私有的。只能在这个类里使用,他的子类也无法使用
注意:a. 如果加访问修饰符,要去掉var
eg:
class Ren
{
public $name; //成员变量,一般不要赋值
protected $age;
private $height;
var $sex;
}
echo $r->$name;
echo $r->$age;
echo $r->$height;
echo $r->$sex;
这时的$name $sex 可以调用,$age,$height 是无法调用的.
因为对象不属于类,类只能在{}内使用
b. 如果不加访问修饰符,默认是公有的
6. $this引用
$this 代表该对象(哪个对象调用代表哪个),不是代表类。专门用来完成对象内部成员之间的访问。
class Ren
{
var $name;
var $age;
var $height;
var $sex;
function Run()
{
echo "这个人正在奔跑";
}
function Say()
{
echo $this->name."在说话"; //在方法Say()中,使用$this 访问name
$this->Run(); //也可以在Say()中调用另一个方法 Run()
}
}
$r=new Ren();
$r->name="张三";
$r->Say();
输出结果为:

7. 构造函数/构造方法:
1.写法特殊:写法固定不变 function __construct()
function后加空格和两个下划线
2. 执行特殊:在造对象时直接执行,无需调用
3. 作用:对对象执行初始化操作
class Ren
{
public $Name;//成员变量,一般不要赋值
protected $age;
private $height;
var $sex;
function __construct($s) //构造函数,原来的还在执行,可以添加自己的东西
{
$this->sex=$a; //初始化sex的值
}
}
$r=new Ren("男");
echo $r->sex="女";
输出结果为:女
8. 析构函数:
在对象销毁前执行
function __destruct()
{
echo "该对象销毁了!";
}
9. 面向对象的三大特征:封装性,继承性,多态性
封装性:
9.1 目的:让类更加安全,不让外界直接访问类里面的成员变量
9.2 做法:1.把成员变量做成私有的,private
2. 做一个方法来实现变量的取值或赋值,在方法里加限制条件 SetAge,GetAge
class Ren
{
private $Name;
private $age;
private $sex;
function __destruct($s)
{
echo $this->sex=$a;
}
function SetAge($a)
{
if($a>10 && $a<50)
{
echo $this->age =$a;
}
}
function GetAge()
{
return $this->age;
}
9.3 SetAge和GetAge
function SetAge($a) //给age赋值的函数
{
if($a>10 && $a<50)
{
echo $this->age =$a;
}
}
$r=new Ren();
$r->SetAge(40);//输出结果为40
$r->SetAge(100);//超出条件限制,无结果
function GetAge() //取age的值
{
return $this->age;
}
echo $r->GetAge="30";//输出结果为30,也可以用 echo $r->GetAge=(30);
9.4 使用类里面提供的魔术方法,也可以实现对私有成员的操作
1.function __set()
{
}
eg:
function __set($name,$value) //对类累里面的私有成员进行赋值,设置参数
{
if($name=="age")
{
//$this->变量名=$value;
if($value>20 && $value<50)
{
echo $this->$name=$value;
}
}
else
{
echo $this->$name=$value;
}
}
$r->__set("name","张三"); //调用function __set()赋值
$r->$name="张三"; //执行该语句会自动调用__set方法
eg:
//$r->name="李四";
//$r->age="40";
//$r->sex="女";
特点::1.自动执行
2.把赋值语句中的变量名作为第一个参数,把变量值作为第二个参数调用__set()方法
2.function __get()
{
}
eg:
function __get($name) //对类累里面的私有成员进行取值,设置参数
{
return $this->$name;
}
特点:会自动执行,把取值语句中的变量名作为参数调用__get()方法
eg:
$r->name="张三";
$r->sex="男";
php 之 类,对象的更多相关文章
- C++ 类对象和 指针的区别
C++ 类对象和 指针的区别 C++ 类对象和 指针的区别 转自:http://blog.csdn.net/ym19860303/article/details/8557746 指针的情况 class ...
- Android 通过 Intent 传递类对象或list对象
(转:http://www.cnblogs.com/shaocm/archive/2013/01/08/2851248.html) Android中Intent传递类对象提供了两种方式一种是 通过实现 ...
- NSLog(@"%@",类对象); 默认输出类名
NSLog()函数输出Objective-c对象时,输出的是该对象的description方法的返回值.也就是说,以下两行代码作用完全一样(假设p是指向任何对象的指针变量). NSLog(@" ...
- WPF整理-XAML构建后台类对象
1.XAML 接触WPF的第一眼就是XAML---XAML是用来描绘界面的.其实不然! "Actually, XAML has nothing to do with UI. It's mer ...
- class中new与未new的区别 类对象占用空间--转载
转载自http://blog.sina.com.cn/shuiwuhendeboke 颗颗的博客 (1)作用域不同 不用new:作用域限制在定义类对象的方法中,当方法结束时,类对象也被系统释放了 ...
- 规则引擎集成接口(九)Java类对象
Java类对象 右键点击“对象库” —“添加java类对象”,如下图: 弹出窗体,在文本框中输入类的全名“com.flagleader.test.Test”,选择该类型后确定,如下: 显示如下,勾选上 ...
- 1,SFDC 开发篇 - 类对象和SOQL查询
1,类对象 & 接口 & 属性 2, Object & SOQL
- 福利->KVC+Runtime获取类/对象的属性/成员变量/方法/协议并实现字典转模型
我们知道,KVC+Runtime可以做非常多的事情.有了这个,我们可以实现很多的效果. 这里来个福利,利用KVC+Runtime获取类/对象的所有成员变量.属性.方法及协议: 并利用它来实现字典转模型 ...
- Python的高级特性8:你真的了解类,对象,实例,方法吗
Python的高级特性1-7系列是本人从Python2过渡3时写下的一些个人见解(不敢说一定对),接下来的系列主要会以类级为主. 类,对象,实例,方法是几个面向对象的几个基本概念,其实我觉得很多人并不 ...
- Effective Objective-C 2.0 — 第14条:理解“类对象“的用意
每个实例都有一个指向Class 对象的指针,用以表明其类型,而这些 Class 对象则构成了类的继承体系. 如果对象类型无法在编译期确定,那么就应该使用类型信息查询方法来探知. 尽量使用类型信息查询方 ...
随机推荐
- 几个强大的oracle自带函数,可根据日期算年纪,根据数值匹配字段
select A.USER_NAME, decode(A.SEX, 1, '男', 2, '女')AS SEX, A.HEAD_PORTRAIT, TRUNC(months_between(sysda ...
- Verilog HDL中阻塞语句和非阻塞语句的区别
在Verilog中有两种类型的赋值语句:阻塞赋值语句(“=”)和非阻塞赋值语句(“<=”).正确地使用这两种赋值语句对于Verilog的设计和仿真非常重要. Verilog语言中讲的阻塞赋值与非 ...
- Linux格式化分区报错Could not start /dev/sda No such file or directory 解决办法
Linux查看已经分好的区[root@linuxidc ~]# fdisk -l /dev/sda Disk /dev/sda: 21.5 GB, 21474836480 bytes 255 he ...
- altium designer不经过原理图直接在空白pcb上加封装然后画线
如果是复杂点的PCB,建议还是画下SCH,如果PCB只有几个元件,那么可以用这种方法,想不画原理图,直接进行布线,往往是很多初学者最想知道的,但是这也一定不是初学者能学到的.因为你买的书,都是按画PC ...
- live555的编译及使用
live555是个流媒体C++开源库,VLC的Meida Player就使用了它的API完成的RTSP客户端,由于VLC的SDK没有提供相关record流到视频文件的API,所以我想用过live555 ...
- 利用dbms_backup_restore恢复数据库
测试环境:OEL+11.2.0.1 实例名:orcl2 DBID:1336959433 场景:Oracle数据库的存储坏了,数据文件和控制文件全部丢失,只有数据文件的备份集,且备份集中无控制文件.(当 ...
- git “bad index file sha1 signature fatal: index file corrupt”错误
在执行commit或revert等操作时,提示“bad index file sha1 signature fatal: index file corrupt”错误,导致操作失败.这是由于git的in ...
- 【HDOJ】1341 Simple Computers
注意PC要与31. #include <cstdio> #include <cstring> #include <cstdlib> #define MAXN 40 ...
- DLL模块:extern "C"的简单解析
1.揭密extern "C" extern "C"包含双重含义,从字面上即可得到:首先,被它修饰的目标是 "extern”的:其次,被它修饰的目标是 ...
- 关于apriori算法的一个简单的例子
apriori算法是关联规则挖掘中很基础也很经典的一个算法,我认为很多教程出现大堆的公式不是很适合一个初学者理解.因此,本文列举一个简单的例子来演示下apriori算法的整个步骤. 下面这个表格是代表 ...