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 文件上传全攻略
Apr 28 PHP
初学PHP的朋友 经常问的一些问题。不断更新
Aug 11 PHP
PHP 万年历实现代码
Oct 18 PHP
PHP仿博客园 个人博客(1) 数据库与界面设计
Jul 05 PHP
PHP函数microtime()用法与说明
Dec 04 PHP
php统计文章排行示例
Mar 04 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
Jul 30 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
Nov 22 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
Feb 08 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
PHP explode()函数用法讲解
Feb 15 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
计算2000年01月01日起到指定日的天数
2006/10/09 PHP
用PHP制作的意见反馈表源码
2007/03/11 PHP
PHP可变函数的使用详解
2013/06/14 PHP
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
在PHP中运行Linux命令并启动SSH服务的例子
2014/06/12 PHP
PHP中file_get_contents高?用法实例
2014/09/24 PHP
禁止F5等快捷键的JS代码
2007/03/06 Javascript
EASYUI TREEGRID异步加载数据实现方法
2012/08/22 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
JS判断字符串包含的方法
2015/05/05 Javascript
解析javascript中鼠标滚轮事件
2015/05/26 Javascript
js动态获取子复选项并设计全选及提交的实现方法
2016/06/24 Javascript
Java  Spring 事务回滚详解
2016/10/17 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
2017/09/25 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
手把手教你如何使用nodejs编写cli命令行
2018/11/05 NodeJs
微信小程序 wxParse插件显示视频问题
2019/09/27 Javascript
Vue解析剪切板图片并实现发送功能
2020/02/04 Javascript
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
Python利用itchat库向好友或者公众号发消息的实例
2019/02/21 Python
python opencv实现图像边缘检测
2019/04/29 Python
Django  ORM 练习题及答案
2019/07/19 Python
python3.7环境下安装Anaconda的教程图解
2019/09/10 Python
python使用Word2Vec进行情感分析解析
2020/07/31 Python
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
CSS3与动画有关的属性transition、animation、transform对比(史上最全版)
2017/08/18 HTML / CSS
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
Nike香港官网:Nike HK
2019/03/23 全球购物
应届生个人求职信模板
2013/11/26 职场文书
庆七一活动简报
2015/07/20 职场文书
MySQL 数据类型选择原则
2021/05/27 MySQL
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python
Oracle删除归档日志及添加定时任务
2022/06/28 Oracle