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 缓冲的免费实现方法
Oct 09 PHP
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
Sep 30 PHP
PHP学习之数组的定义和填充
Apr 17 PHP
php学习笔记之 函数声明(二)
Jun 09 PHP
smarty模板中拼接字符串的方法
Feb 14 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
Mar 13 PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 PHP
PHP基于curl后台远程登录正方教务系统的方法
Oct 14 PHP
thinkPHP多表查询及分页功能实现方法示例
Jul 03 PHP
利用Laravel生成Gravatar头像地址的优雅方法
Dec 30 PHP
Laravel框架实现定时发布任务的方法
Aug 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
PHPlet在Windows下的安装
2006/10/09 PHP
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
PHP数组式访问接口ArrayAccess用法分析
2017/12/28 PHP
Laravel5.5以下版本中如何自定义日志行为详解
2018/08/01 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
jquery DOM操作 基于命令改变页面
2010/05/06 Javascript
15个款优秀的 jQuery 图片特效插件推荐
2011/11/21 Javascript
浅谈Javascript数组索引
2015/07/29 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
2015/08/05 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
jQuery实现页面点击后退弹出提示框的方法
2016/08/24 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
js评分组件使用详解
2017/06/06 Javascript
浅谈node的事件机制
2017/10/09 Javascript
vue.js层叠轮播效果的实例代码
2018/11/08 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
详解Python编程中包的概念与管理
2015/10/16 Python
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
基于python实现雪花算法过程详解
2019/11/16 Python
python selenium实现发送带附件的邮件代码实例
2019/12/10 Python
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
2018/12/29 HTML / CSS
html5构建触屏网站之touch事件介绍
2013/01/07 HTML / CSS
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
Spongelle官网:美国的创意护肤洗护品牌
2019/05/15 全球购物
转预备党员政审材料
2014/02/06 职场文书
服务质量承诺书
2014/03/27 职场文书
教师新年寄语
2014/04/03 职场文书
招标承诺书
2014/08/30 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
群众路线学习笔记范文
2014/11/06 职场文书
导游词之河姆渡遗址博物馆
2019/10/10 职场文书
Redis过期数据是否会被立马删除
2022/07/23 Redis