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 字符转义 注意事项
May 27 PHP
两个开源的Php输出Excel文件类
Feb 08 PHP
PHP中防止SQL注入实现代码
Feb 19 PHP
修改PHP的memory_limit限制的方法分享
Feb 21 PHP
色色整理的PHP面试题集锦
Mar 08 PHP
php切割页面div内容的实现代码分享
Jul 31 PHP
PHP字符串的编码问题的详细介绍
Apr 27 PHP
php数组比较实现查找连续数的方法
Jul 29 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
PHP函数超时处理方法
Feb 14 PHP
Paypal实现循环扣款(订阅)功能
Mar 23 PHP
解决tp5在nginx下修改配置访问的问题
Oct 16 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
将兴奋、喜悦和坎加斯带到戴安娜:亚马逊公主
2020/03/03 欧美动漫
谈谈PHP语法(2)
2006/10/09 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
PHP输入输出流学习笔记
2015/05/12 PHP
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
2017/10/12 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
两种常用的javascript数组去重方法思路及代码
2013/03/26 Javascript
Javascript中的delete操作符详细介绍
2014/06/06 Javascript
JavaScript开发者必备的10个Sublime Text插件
2016/02/27 Javascript
localStorage实现便签小程序
2016/11/28 Javascript
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
javascript实现的图片预览和上传功能示例【兼容IE 9】
2020/05/01 Javascript
[01:12:44]VG vs Mineski Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
[01:08:29]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第一场 1月9日
2021/03/11 DOTA
Python使用minidom读写xml的方法
2015/06/03 Python
Python中的单继承与多继承实例分析
2018/05/10 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
python进行文件对比的方法
2018/12/24 Python
Python3并发写文件与Python对比
2019/11/20 Python
Python使用QQ邮箱发送邮件实例与QQ邮箱设置详解
2020/02/18 Python
深入浅析python变量加逗号,的含义
2020/02/22 Python
Python绘制组合图的示例
2020/09/18 Python
写好求职信第一句话的技巧
2013/10/26 职场文书
工作的心得体会
2013/12/31 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
幼儿园家长评语大全
2014/04/16 职场文书
社区学习雷锋活动总结
2014/04/25 职场文书
教师自查自纠工作情况报告
2014/10/29 职场文书
2014年学生会部门工作总结
2014/11/07 职场文书
2014年留守儿童工作总结
2014/12/10 职场文书
财务部岗位职责
2015/02/03 职场文书
会议主持词结束语
2015/07/03 职场文书
导游词之太原天龙山
2020/01/02 职场文书