<?php

date_default_timezone_set("PRC");

/*
* 1.静态属性用于保存类的公有数据
* 2.静态方法里面只能访问静态属性
* 3.静态成员不需要实例化对象就可以进行访问
* 4.类的内部可以通过self或者static关键字访问自身静态成员
* 5.可以通过parent关键字访问父类的静态成员
* 6.可以通过类的名称在类定义外部访问静态成员
*
*/
class Human{
public $name;
protected $height; //只有自身和子类可以访问
public $weight;
private $isHungry = true; //不能被子类访问

public static $sValue = "Static value in Human class"."\n";

public function eat($food){
echo $this->name."'s eating "."'$food"."\n";
}

public function info(){
echo "HUMAN :".$this->name. ";".$this->height.";".$this->isHungry."\n";
}
}
class Animal{

}

//类的定义以关键字class开始,后面是类的名称,类的命名通常第一个字母大写,以中括号开始和结束
//在PHP中用extends关键字表示类的继承,后面跟父类的类名
//PHP中extends后只能跟一个类的类名,这是PHP中的单继承原则
class NBaplayer extends Human
{
// public $name = "Jordan"; //定义属性
// public $height = "198cm";
// public $weight = "98kg";
public $team = "Bull";
public $playernumber = "23";

private $age = "40"; //Private的类成员只能在内部被访问

//静态属性在定义时在访问控制关键字后面添加static关键字即可
public static $president = "David Stern";
// 静态方法在定义时在访问控制关键字后面添加static关键字即可
public static function changePresident($newpresdt){
//在类定义中使用静态成员时,用self或者static关键字后面跟::操作符即可
//注意,在访问静态成员属性时,::后面需要跟$符号
self ::$president = $newpresdt;
//使用parent关键字访问父类中的静态成员
echo parent::$sValue."\n";
}

//构造函数,在对象被实例化时自动调用
function __construct($name,$height,$weight,$team,$playernumber)
{
echo "in NBaplayer constuctor\n";
$this->name = $name; //$this是php里面的伪变量,表示对象自身,可以通过$->this的方式访问对象的属性和方法
$this->height = $height;
$this->weight = $weight;
$this->team = $team;
$this->playernumber = $playernumber;
echo $this->height."\n";
}

//析构函数,在程序执行结束时自动调用
//析构函数通常被用于清理程序使用的资源。比如,程序使用了打印机,那么可以在析构函数里释放打印机资源
function __destruct()
{
echo "Destroying ".$this->name."\n";
}

//定义方法
public function run()
{
echo "running\n";
}

public function jump()
{
echo "jumping\n";
}

public function dribble()
{
echo "dribbling\n";
}

public function shoot()
{
echo "shooting\n";
}

public function dunk()
{
echo "dunking\n";
}

public function pass()
{
echo "passing\n";
}
public function getAge(){
echo $this->name."'s age is ".($this->age - 2)."\n";
}
}
//类到对象的实例化
//类的对象为实例化时使用关键字new,后面是类的名称和一堆括号
// $jordan = new NBaplayer("Jordan","198cm","98kg","Bull","23");
// $james = new NBaplayer("James","203cm","120kg","Heat","6");
//对象中的成员属性通过->符号来访问
//在类定义外部访问静态属性,可以用类名加::操作符的方法来访问类的静态成员
echo NBaplayer::$president." Before change"."\n";
NBaplayer::changePresident("Aadam Siver");
echo NBaplayer::$president."\n";
echo Human::$sValue."\n";
// echo "Jordan : ".$jordan->president."\n";
// echo "James : ".$james->president."\n";
echo $jordan->name."\n";
//echo $jordan->getAge();
// $jordan->info();
// $jordan->eat("Apple"); //在子类中的对象上可以直接访问父类中定义的属性和方法
//对象中的成员方法通过->符号来访问
// $jordan->dribble();
// $jordan->dunk();
// $jordan->jump();
// $jordan->pass();
// $jordan->run();
// $jordan->shoot();
//
// //每一次用new实例化对象的时候,都会用类名后面的参数列表调用构造函数
// $james = new NBaplayer("James","203cm","120kg","Heat","6");
// echo $james->name."\n";

// //通过把变量设置为Null,可以出发析构函数的调用
// //当对象不会再被使用的时候,会触发析构函数
// $james1 = $james;
// $james2 = &$james;
// $james2 = null;
// $james1 = null;
// echo "From now on James will not be used.\n";
?>

PHP面向对象编程简单实例的更多相关文章

  1. 以最简单的登录为例,诠释JS面向对象的简单实例

    JavaScript,是前端开发人员必须会的一门技术,从JS演变出来的有很多框架,先说说几个热门的框架吧: JQuery:这个技术必须会,如果不会,那一定要会查api,知道怎么写,要看得懂英文文档,这 ...

  2. C++多线程编程简单实例

    C++本身并没有提供任何多线程机制,但是在windows下,我们可以调用SDK win32 api来编写多线程的程序,下面就此简单的讲一下: 创建线程的函数 HANDLE CreateThread( ...

  3. python 中面向对象编程简单总结2

    1.python中继承的特点: (1)总是从一个类继承,默认为object类 (2)不要忘记调用super.__init__方法来初始化父类的方法 def __init__(self,args): s ...

  4. python 中面向对象编程简单总结3--定制类

    声明:资源来自慕课网python学习课程,以下只是个人学习总结,仅供参考 1.Python类的特殊方法 特征:以  __ 开头并结尾的方法,比如用于print的__str__() , __getatt ...

  5. python 中面向对象编程简单总结1

    1.类的定义方式 class ClassName(object): #object 表示继承的类,默认为object pass 类的使用类似函数的调用,也可以认为是调用了一次模板来创建一个实例. 2. ...

  6. Python 进阶_OOP 面向对象编程_实例属性和方法

    目录 目录 构造器和解构器 构造器 __init__ 真构造器 __new__ 解构器 __del__ 实例方法 Python 中的 抽象方法 实例属性 查看实例属性 实例属性和类属性的区别 访问不可 ...

  7. php 类与对象 面向对象编程 简单例子

    <?php class Foo { //类 名称为Foo public $aMemberVar = 'aMemberVar Member Variable'; //类变量 public $aFu ...

  8. Java 雇员管理小练习(理解面向对象编程)

    在学习集合框架的时候,初学者很容易练习到学生管理系统.雇员管理体统等练习题.在学习集合框架之前,基本上Java基本语法都学完了,集合框架也从侧面的检验对前面学习的理解.下面用一个曾经做过的练习题,回顾 ...

  9. python—面向对象编程

    面向对象编程简单来说就是基于对 类 和 对象 的使用,所有的代码都是通过类和对象来实现的编程就是面向对象编程! 面向对象的三大特性:封装.继承.多态 首先创建一个类 #使用class创建一个Schoo ...

随机推荐

  1. Http协议与TCP协议理解

    TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通 ...

  2. LPC1768的IIS通讯

    IIS是飞利浦公司定义的一种用于音频传输的数字总线,LPC1768支持该总线, I2S接口为一条3线串行总线,含有1根数据线.1根时钟线和1根字选择信号线.基本的I2S连接具有一个主机(其总是为主机) ...

  3. 让DIV的滚动条自动滚动到最底部 - 4种方法

    方法一:使用锚标记要滚动到的位置,然后通过click方法模拟点击滚动到锚所在位置 <script language="javascript1.2" type="te ...

  4. <libxml2/tree.h> file not found

    Build Settings: head search paths :$(inherited) /usr/include/libxml2 Build phases: 加上libxml2.tbd

  5. iOS调试-LLDB学习总结

    from:http://www.jianshu.com/p/d6a0a5e39b0e LLDB阐述 LLDB 是一个有着 REPL 的特性和 C++ ,Python 插件的开源调试器.LLDB 绑定在 ...

  6. Matlab笔记

    提取RGB分量,并显示出来 rgb=imread('mao.jpg'); rgb_r=rgb(:,:,); rgb_g=rgb(:,:,); rgb_b=rgb(:,:,); zero=zeros(, ...

  7. Android动画之translate(位移动画)(转)

    转自:http://www.cnblogs.com/bavariama/archive/2013/01/29/2881225.html 上一篇文章讲了 Android的左右滑动切换,实现过程是非常简单 ...

  8. APK的反编译

    有秘密的地方就有见不得光的东西,我讨厌这些,所以对于某一个XX圈APP极其反感,感觉就像一个色情网站 一.ApkTool的使用 看了几个教程,自己下载的好像总是不完整,下载包解压后一个没有aapt.e ...

  9. ajax 页面请求后,jsp页面定位

    如下图所示.A,B两区域为不动区域,既不随着滚动条的滚动而移动.C区域为异步加载内容区域, 在C区域中,点击查询按钮,需要异步加载查询 结果.但是查询结果会很长,这样子,就需要向下滑动滚动条,用户体验 ...

  10. Python3基础 使用 in notin 查询一个字符是否指定字典的键或者值

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...