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脚本数据库功能详解(上)
Oct 09 PHP
dedecms系统的广告设置代码 基础版本
Apr 09 PHP
php excel类 phpExcel使用方法介绍
Aug 21 PHP
基于xcache的配置与使用详解
Jun 18 PHP
php比较相似字符串的方法
Jun 05 PHP
PHP常用工具类大全附全部代码下载
Dec 07 PHP
yii2中添加验证码的实现方法
Jan 09 PHP
php根据数据id自动生成编号的实现方法
Oct 16 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
Nov 05 PHP
thinkPHP实现的省市区三级联动功能示例
May 05 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
Jun 11 PHP
Yii使用DbTarget实现日志功能的示例代码
Jul 21 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实现框架(二)
2006/10/09 PHP
PHP系列学习之日期函数使用介绍
2012/08/18 PHP
php将字符串转换为数组实例讲解
2020/05/05 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
Javascript 异步加载详解(浏览器在javascript的加载方式)
2012/05/20 Javascript
深入解析contentWindow, contentDocument
2013/07/04 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
2016/05/15 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
2018/01/04 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
详解Node.js amqplib 连接 Rabbit MQ最佳实践
2019/01/24 Javascript
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
JS立即执行的匿名函数用法分析
2019/11/04 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
[05:11]TI9战队采访——VIRTUSPRO
2019/08/22 DOTA
python用户管理系统的实例讲解
2017/12/23 Python
Python实现的特征提取操作示例
2018/12/03 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
Python pandas RFM模型应用实例详解
2019/11/20 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
电脑教师的自我评价
2013/12/18 职场文书
服装电子商务创业计划书
2014/01/30 职场文书
消防安全汇报材料
2014/02/08 职场文书
岗位廉政承诺书
2014/03/27 职场文书
初三学生评语大全
2014/04/24 职场文书
信用社主任竞聘演讲稿
2014/05/23 职场文书
保护环境标语
2014/06/09 职场文书
金融与证券专业求职信
2014/06/22 职场文书
好媳妇事迹材料
2014/12/24 职场文书
孔庙导游词
2015/02/04 职场文书
运动会运动员赞词
2015/07/22 职场文书
muduo TcpServer模块源码分析
2022/04/26 Redis