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
php流量统计功能的实现代码
Sep 29 PHP
显示程序执行时间php函数代码
Aug 29 PHP
php实现斐波那契数列的简单写法
Jul 19 PHP
PHP读取txt文本文件并分页显示的方法
Mar 11 PHP
PHP-FPM之Chroot执行环境详解
Aug 03 PHP
CI(CodeIgniter)模型用法实例分析
Jan 20 PHP
ThinkPHP中where()使用方法详解
Apr 19 PHP
Yii框架实现图片上传的方法详解
May 20 PHP
简单谈谈PHP面向对象之标识对象
Jun 27 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
PHP时间类完整代码实例
Feb 26 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
如何开始收听短波广播
2021/03/01 无线电
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
Chrome Web App开发小结
2014/09/04 PHP
PHP中使用循环实现的金字塔图形
2014/11/08 PHP
php采用session实现防止页面重复刷新
2015/12/24 PHP
PHP实现的日历功能示例
2018/09/01 PHP
JavaScript 未结束的字符串常量常见解决方法
2010/01/24 Javascript
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
关于javaScript注册click事件传递参数的不成功问题
2014/07/18 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
2015/10/28 Javascript
javascript高级选择器querySelector和querySelectorAll全面解析
2016/04/07 Javascript
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
浅谈Koa2框架利用CORS完成跨域ajax请求
2018/03/06 Javascript
vue中使用protobuf的过程记录
2018/10/26 Javascript
详细讲解如何创建, 发布自己的 Vue UI 组件库
2019/05/29 Javascript
node.js 如何监视文件变化
2020/09/01 Javascript
[15:09]DOTA2国际邀请赛采访专栏:Loda
2013/08/06 DOTA
python获取mp3文件信息的方法
2015/06/15 Python
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
python并发和异步编程实例
2018/11/15 Python
python使用参数对嵌套字典进行取值的方法
2019/04/26 Python
使用apiDoc实现python接口文档编写
2019/11/19 Python
基于python使用tibco ems代码实例
2019/12/20 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
2020/01/03 Python
Python使用monkey.patch_all()解决协程阻塞问题
2020/04/15 Python
小蚁科技官方商店:YI Technology
2019/08/23 全球购物
新年联欢会主持词
2014/03/27 职场文书
党课培训主持词
2014/04/01 职场文书
真诚的求职信
2014/07/04 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技
nginx搭建NFS网络文件系统
2022/04/14 Servers
Python使用永中文档转换服务
2022/05/06 Python
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python