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 IP转换整形(ip2long)的详解
Jun 06 PHP
php使用Cookie实现和用户会话的方法
Jan 21 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
Mar 19 PHP
PHP中两个float(浮点数)比较实例分析
Sep 27 PHP
PHP操作mysql数据库分表的方法
Jun 09 PHP
使用正则去除php代码中的注释方法
Nov 03 PHP
浅析php-fpm静态和动态执行方式的比较
Nov 09 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
thinkPHP框架自动填充原理与用法分析
Apr 03 PHP
PHP封装的完整分页类示例
Aug 21 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
May 06 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 模拟$_PUT实现代码
2010/03/15 PHP
在WINDOWS中设置计划任务执行PHP文件的方法
2011/12/19 PHP
PHP如何使用Memcached
2016/04/05 PHP
什么是OneThink oneThink后台添加插件步骤
2016/04/13 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
php二维数组按某个键值排序的实例讲解
2019/02/15 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
分享20多个很棒的jQuery 文件上传插件或教程
2011/09/04 Javascript
JS 实现Json查询的方法实例
2013/04/12 Javascript
JavaScript学习笔记之定时器
2015/01/22 Javascript
javascript实现checkBox的全选,反选与赋值
2015/03/12 Javascript
写给小白的JavaScript引擎指南
2015/12/04 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
vue中keep-alive的用法及问题描述
2018/05/15 Javascript
VeeValidate 的使用场景以及配置详解
2019/01/11 Javascript
详解微信小程序开发之formId使用(模板消息)
2019/08/27 Javascript
vue简单练习 桌面时钟的实现代码实例
2019/09/19 Javascript
将Vue组件库更换为按需加载的方法步骤
2020/05/06 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
Python 提取dict转换为xml/json/table并输出的实现代码
2016/08/28 Python
解决Python一行输出不显示的问题
2018/12/03 Python
Python Datetime模块和Calendar模块用法实例分析
2019/04/15 Python
Python常用模块之requests模块用法分析
2019/05/15 Python
如何基于python生成list的所有的子集
2019/11/11 Python
Python3实现mysql连接和数据框的形成(实例代码)
2020/01/17 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
Java文件和目录(IO)操作
2014/08/26 面试题
大学生职业生涯规划书模板
2014/01/18 职场文书
高二政治教学反思
2014/02/01 职场文书
夫妻双方自愿离婚协议书怎么写
2014/12/01 职场文书
2016年学生会感恩节活动总结
2016/04/01 职场文书
2016年第16个全民国防教育日宣传活动总结
2016/04/05 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL
Linux下搭建SFTP服务器的命令详解
2022/06/25 Servers