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 相关文章推荐
WINDOWS 2000下使用ISAPI方式安装PHP
Sep 05 PHP
彻底杜绝PHP的session cookie错误
Aug 09 PHP
初步介绍PHP扩展开发经验分享
Sep 06 PHP
PHP数组及条件,循环语句学习
Nov 11 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
Jan 09 PHP
PHP删除数组中空值的方法介绍
Apr 14 PHP
php中使用PHPExcel读写excel(xls)文件的方法
Sep 15 PHP
php实现字符串翻转的方法
Mar 27 PHP
详解js异步文件加载器
Jan 24 PHP
利用PHP绘图函数实现简单验证码功能的方法
Oct 18 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
Feb 04 PHP
PHP new static 和 new self详解
Feb 19 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 session会话的安全性分析
2011/09/08 PHP
php excel reader读取excel内容存入数据库实现代码
2012/12/06 PHP
PHP内核探索:变量概述
2014/01/30 PHP
Yii使用ajax验证显示错误messagebox的解决方法
2014/12/03 PHP
php的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
php关联数组快速排序的方法
2015/04/17 PHP
PHP递归遍历多维数组实现无限分类的方法
2016/05/06 PHP
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
javascript new后的constructor属性
2010/08/05 Javascript
判断浏览器的javascript版本的代码
2010/09/03 Javascript
很棒的学习jQuery的12个网站推荐
2011/04/28 Javascript
基于JQuery制作可编辑的表格特效
2014/12/23 Javascript
javascript用函数实现对象的方法
2015/05/14 Javascript
搞定immutable.js详细说明
2016/05/02 Javascript
值得分享和收藏的Bootstrap学习教程
2016/05/12 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
2016/12/13 Javascript
修改ligerui 默认确认按钮的方法
2016/12/27 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
2017/01/24 Javascript
jQuery实现给input绑定回车事件的方法
2017/02/09 Javascript
javascript 日期相减-在线教程(附代码)
2017/08/17 Javascript
jQuery实现的事件绑定功能基本示例
2017/10/11 jQuery
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
Python3中常用的处理时间和实现定时任务的方法的介绍
2015/04/07 Python
NetworkX之Prim算法(实例讲解)
2017/12/22 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
详解Python中is和==的区别
2019/03/21 Python
Django项目中使用JWT的实现代码
2019/11/04 Python
亚洲最大的眼镜批发商和零售商之一:Glasseslit
2018/10/08 全球购物
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
运动会邀请函范文
2014/02/06 职场文书
大专生毕业的自我评价
2014/02/06 职场文书
2014小学植树节活动总结
2014/03/10 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
社区党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
Python数组变形的几种实现方法
2022/05/30 Python