php基础知识:类与对象(1)


Posted in PHP onDecember 13, 2006

类的定义:
   以关键字 class 开头,后面跟着类名,可以是任何非 PHP 保留字的名字。后面跟着一对花括号,里面包含有类成员和方法的定义。

伪变量$this
可以在当一个方法在对象内部调用时使用。$this 是一个到调用对象(通常是方法所属于的对象,但也可以是另一个对象,如果该方法是从第二个对象内静态调用的话)的引用。
//??静态调用的内部到底是怎样的?
看个例子:
class A
{
   function foo()
   {
       if (isset($this)) {
           echo '$this is defined (';
           echo get_class($this);
           echo ")\n";
       } else {
           echo "\$this is not defined.\n";
       }
   }
}
class B
{
   function bar()
   {
       A::foo();
   }
}
$a = new A();
$a->foo();
A::foo();
$b = new B();
$b->bar();
B::bar();
输出结果为:
$this is defined (a)
$this is not defined.
$this is defined (b)
$this is not defined.
/*我希望知道这个例子的内存等的具体实现,我暂时无法理解。如果有人可以讲清楚,可以告诉我。我们宿舍牛头现在正在冬眠,等他醒来,我会问。*/

new
要创建一个对象的实例,必须创建一个新对象并将其赋给一个变量。当创建新对象时该对象总是被赋值,除非该对象定义了构造函数并且在出错时抛出了一个异常。
当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。可以用克隆给一个已创建的对象建立一个新实例。

(这几句话虽然很短,但是未必容易理解。)
例子如下:
class SimpleClass
{
   // 成员声明
   public $var = 'a default value';

   // 方法声明
   public function displayVar() {
       echo $this->var;
   }
}

//看下面的图.1>new 在heap(堆)中实例化一个对象。2>将指针$instance指向他
$instance = new SimpleClass();
//3>将指针$assigned指向heap中的实例化对象
$assigned   =  $instance;
//4>将$instance的引用(地址)赋值给$reference
$reference  =& $instance;
$instance->var = '$assigned will have this value';
$instance = null;
// 5>间断$instance与heap中实例的连接。
var_dump($instance);
var_dump($reference);
var_dump($assigned);
输出:
NULL
NULL
object(SimpleClass)#1 (1) {
  ["var"]=>
    string(30) "$assigned will have this value"
}
图示整个过程:
php基础知识:类与对象(1)

类继承extends
一个类可以在声明中用 extends 关键字继承另一个类的方法和成员。不能扩展多个类,只能继承一个基类。

被继承的方法和成员可以通过用同样的名字重新声明被覆盖,除非父类定义方法时使用了 final 关键字。可以通过 parent:: 来访问被覆盖的方法或成员。(继承的机制到底怎样的?)
源代码如下:
class ExtendClass extends SimpleClass
{
   // Redefine the parent method
   function displayVar()
   {
       echo "Extending class\n";
       parent::displayVar();
   }
}
$extended = new ExtendClass();
$extended->displayVar();

输出:
Extending class
a default value

PHP 相关文章推荐
PHP 循环删除无限分类子节点的实现代码
Jun 21 PHP
PHP引用符&的用法详细解析
Aug 22 PHP
php获取从百度搜索进入网站的关键词的详细代码
Jan 08 PHP
php中cookie的使用方法
Mar 29 PHP
Destoon模板制作简明教程
Jun 20 PHP
php上传图片之时间戳命名(保存路径)
Aug 15 PHP
PHP计算日期相差天数实例分析
Feb 23 PHP
如何使用php等比例缩放图片
Oct 12 PHP
THINKPHP在添加数据的时候获取主键id的值方法
Apr 03 PHP
利用PHP获取汉字首字母并且分组排序详解
Oct 22 PHP
php使用curl模拟多线程实现批处理功能示例
Jul 25 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
Sep 30 PHP
php基础知识:函数基础知识
Dec 13 #PHP
php基础知识:控制结构
Dec 13 #PHP
《PHP边学边教》(04.编写简易的通讯录――视频教程1)
Dec 13 #PHP
IIS+PHP+MySQL+Zend配置 (视频教程)
Dec 13 #PHP
傻瓜化配置PHP环境――Appserv
Dec 13 #PHP
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
Dec 13 #PHP
中篇:安装及配置PHP
Dec 13 #PHP
You might like
PHP入门速成(2)
2006/10/09 PHP
php生成文件
2007/01/15 PHP
深入理解PHP原理之异常机制
2010/08/21 PHP
基于PHP一些十分严重的缺陷详解
2013/06/03 PHP
thinkphp判断访客为手机端或PC端的方法
2014/11/24 PHP
php上传文件并存储到mysql数据库的方法
2015/03/16 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
Ajax和PHP正则表达式验证表单及验证码
2016/09/24 PHP
Thinkphp 5.0实现微信企业付款到零钱
2018/09/30 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
<script defer> defer 是什么意思
2009/05/10 Javascript
javascript Onunload与Onbeforeunload使用小结
2009/12/31 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
jQuery获取同级元素的简单代码
2016/07/09 Javascript
JS限制条件补全问题实例分析
2016/12/16 Javascript
js中less常用的方法小结
2017/08/09 Javascript
JS获取数组中出现次数最多及第二多元素的方法
2017/10/27 Javascript
Django+Vue实现WebSocket连接的示例代码
2019/05/28 Javascript
JS数组方法join()用法实例分析
2020/01/18 Javascript
使用python解析xml成对应的html示例分享
2014/04/02 Python
Django rest framework基本介绍与代码示例
2018/01/26 Python
Python列表解析配合if else的方法
2018/06/23 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
Python代码注释规范代码实例解析
2020/08/14 Python
苏宁红孩子母婴商城:redbaby
2017/02/12 全球购物
标记环介质访问控制协议
2016/03/27 面试题
高三自我鉴定怎么写
2013/10/19 职场文书
实习生岗位职责
2014/04/12 职场文书
市级三好学生事迹材料
2014/08/27 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书
婚礼嘉宾致辞
2015/07/28 职场文书
教师学习中国梦心得体会
2016/01/05 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python
go语言中http超时引发的事故解决
2021/06/02 Golang