对象:任何东西都可以称为对象,类实例化出来的东西
类:对所有同类的对象抽象出来的东西

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类和对象(一)的更多相关文章

  1. Java编程里的类和对象

    像我们搞计算机这块的,都知道这么一件事,当前的计算机编程语言主要分为两大块,一为面向过程,二为面向对象.Java就是一门纯面向对象的语言.学习了一个月左右的Java,在下对于Java当中的类和对象有了 ...

  2. Python - 类与对象的方法

    类与对象的方法

  3. C++基础知识(5)---类和对象

    终于把C++中的基础在前面的几篇博客中总结完了,可能还有一些语法还没有总结到,没关系,以后用到了再查资料就好.类是C++中的一个非常重要的概念,这是区别你使用的C++到底是面向过程还是面向对象的一个重 ...

  4. 简述JavaScript对象、数组对象与类数组对象

    问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ...

  5. 前端学PHP之面向对象系列第一篇——类和对象

    × 目录 [1]类 [2]成员属性[3]成员方法[4]对象[5]成员访问[6]this 前面的话 面向对象程序设计(OOP)是一种计算机编程架构.计算机程序由单个能够起到子程序作用的单元或对象组成,为 ...

  6. Objective-C Runtime 运行时之一:类与对象

    Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...

  7. [Java入门笔记] 面向对象编程基础(一):类和对象

    什么是面向对象编程? 我们先来看看几个概念: 面向过程程序设计 面向过程,是根据事情发展的步骤,按进行的顺序过程划分,面向过程其实是最为实际的一种思考方式,可以说面向过程是一种基础的方法,它考虑的是实 ...

  8. 解析Java类和对象的初始化过程

    类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来 ...

  9. 02OC的类和对象

    这章重点介绍OC的类以及对象,由于C语言是面向过程语言,而OC只是对于C语言多了一些面向对象的特性,所以OC相对于其他面向对象语言,例如C#.Java等没有那么多的语法特性,所以差别还是比较大的. 一 ...

  10. swift基础:第六部分:类与对象

    http://reactnative.cn/docs/0.24/getting-started.html#content(react Native 开发文档) 互联网这个时代,你松懈一天,就会有很多很 ...

随机推荐

  1. type=file文件上传H5新特性

    1.语法 <input name="myFile" type="file"> 2.属性(以下三个仅HTML5支持,因此存在兼容性问题) (1)mul ...

  2. 代理工具Charles使用

    代理工具Charles使用 分类: MAC 2014-03-27 20:41 7810人阅读 评论(2) 收藏 举报 手机开发 一.跟踪HTTPS 1.下载官方的证书ssl.zip证书,解压成*.cr ...

  3. Ajax系列之中的一个:ajax旧貌换新颜

    什么是ajax? 什么是Ajax? Ajax就是Asynchronous +JavaScript+XML.中文翻译为:异步的javascript与XML,它是利用javascript语言和xml数据实 ...

  4. webserver【实时查询当天的天气情况】

    1.webserver是什么? 日常生活中经常会使用到webserver,注册时,会收到验证码,购买东西时,会收到短信,假如,A公司网站和B公司合作,那么A公司注册对的用户可以直接推送给B网站,那怎么 ...

  5. 结合jquery的前后端加密解密 适用于WebApi的SQL注入过滤器 Web.config中customErrors异常信息配置 ife2018 零基础学院 day 4 ife2018 零基础学院 day 3 ife 零基础学院 day 2 ife 零基础学院 day 1 - 我为什么想学前端

    在一个正常的项目中,登录注册的密码是密文传输到后台服务端的,也就是说,首先前端js对密码做处理,随后再传递到服务端,服务端解密再加密传出到数据库里面.Dotnet已经提供了RSA算法的加解密类库,我们 ...

  6. 类中的internal成员可能是一种坏味道

    前言 最近除了搞ASP.NET MVC之外,我也在思考一些编程实践方面的问题.昨天在回家路上,我忽然对一个问题产生了较为清晰的认识.或者说,原先只是有一丝细微的感觉,而现在将它和一些其他的方面进行了联 ...

  7. WebScarab安装

    1.下载webscarab 下载地址:http://sourceforge.net/projects/owasp/files/WebScarab/20070504-1631/ 2.安装webscara ...

  8. iOS GCD不同场景的使用比較

    /**  *  async -- 并发队列  * 会创建线程.一般同一时候开多条  * 并发运行任务  */ <span style="font-size:14px;"> ...

  9. Redis用LPUSH和RPOP实现消息队列

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using ServiceS ...

  10. Quartz.Net - Lesson2: 任务和触发器

    Lesson 2: 任务和触发器 本系列文章是官方3.x文档的翻译,原文地址:https://www.quartz-scheduler.net/documentation/quartz-3.x/tut ...