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 相关文章推荐
几种显示数据的方法的比较
Oct 09 PHP
php url地址栏传中文乱码解决方法集合
Jun 25 PHP
apache mysql php 源码编译使用方法
May 03 PHP
PHP迭代器实现斐波纳契数列的函数
Nov 12 PHP
smarty缓存用法分析
Dec 16 PHP
Linux系统下使用XHProf和XHGui分析PHP运行性能
Dec 08 PHP
CodeIgniter表单验证方法实例详解
Mar 03 PHP
php实现图片上传、剪切功能
May 07 PHP
浅析Laravel5中队列的配置及使用
Aug 04 PHP
php批量修改表结构实例
May 24 PHP
PHP有序表查找之插值查找算法示例
Feb 10 PHP
PHP获取当前系统时间的方法小结
Oct 03 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
利用static实现表格的颜色隔行显示
2006/10/09 PHP
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
PHP二维数组排序的3种方法和自定义函数分享
2014/04/09 PHP
Prototype使用指南之array.js
2007/01/10 Javascript
用jquery来定位
2007/02/20 Javascript
js 变量类型转换常用函数与代码[比较全]
2009/12/01 Javascript
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
基于jQuery架构javascript基础体系
2011/01/01 Javascript
基于jquery库的tab新形式使用
2012/11/16 Javascript
创建js对象和js类的方法汇总
2014/12/24 Javascript
JavaScript数组Array对象增加和删除元素方法总结
2015/01/20 Javascript
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
在JavaScript的正则表达式中使用exec()方法
2015/06/16 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
2015/09/08 Javascript
每天一篇javascript学习小结(RegExp对象)
2015/11/17 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
layui表格实现代码
2017/05/20 Javascript
Angular中的interceptors拦截器
2017/06/25 Javascript
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
jQuery实现可兼容IE6的淡入淡出效果告警提示功能示例
2017/09/20 jQuery
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
Python 加密的实例详解
2017/10/09 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
Python用字典构建多级菜单功能
2019/07/11 Python
python Popen 获取输出,等待运行完成示例
2019/12/30 Python
初级Java程序员面试题
2016/03/03 面试题
高中三年学习生活的自我评价
2013/10/10 职场文书
汽车专业大学生职业生涯规划范文
2014/01/07 职场文书
音乐幼师求职信
2014/07/09 职场文书
成本会计实训报告
2014/11/05 职场文书
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python
python自动化八大定位元素讲解
2021/07/09 Python