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
模拟OICQ的实现思路和核心程序(二)
Oct 09 PHP
一个没有MYSQL数据库支持的简易留言本的编写
Oct 09 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
Jun 03 PHP
php命令行使用方法和命令行参数说明
Apr 08 PHP
PHP使用ob_start生成html页面的方法
Nov 07 PHP
JSON两种结构之对象和数组的理解
Jul 19 PHP
PHP5.4起内置web服务器使用方法
Aug 09 PHP
PHP实现电商订单自动确认收货redis队列
May 17 PHP
Laravel如何使用Redis共享Session
Feb 23 PHP
PHP上传文件及图片到七牛的方法
Jul 25 PHP
laravel excel 上传文件保存到本地服务器功能
Nov 14 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
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
2006/10/09 PHP
php使HTML标签自动补全闭合函数代码
2012/10/04 PHP
php调用mysql存储过程实例分析
2014/12/29 PHP
8个必备的PHP功能开发
2015/10/02 PHP
PHP针对redis常用操作实例详解
2019/08/17 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
js不是基础的基础
2006/12/24 Javascript
JavaScript中判断原生函数检查function是否是原生代码
2014/09/09 Javascript
JavaScript中实现依赖注入的思路分享
2015/01/15 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
JavaScript中的Math.atan2()方法使用详解
2015/06/15 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
2016/08/09 Javascript
jQuery属性选择器用法示例
2016/09/09 Javascript
微信小程序通过api接口将json数据展现到小程序示例
2017/01/20 Javascript
video.js使用改变ui过程
2017/03/05 Javascript
Node.js  REPL (交互式解释器)实例详解
2017/08/06 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
浅谈vue的几种绑定变量的值 防止其改变的方法
2018/03/01 Javascript
JS数组方法reverse()用法实例分析
2020/01/18 Javascript
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
使用Python写个小监控
2016/01/27 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
pycharm激活码快速激活及使用步骤
2020/03/12 Python
Python requests模块安装及使用教程图解
2020/06/30 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
2020/07/13 Python
简述 Python 的类和对象
2020/08/21 Python
StubHub澳大利亚:购买或出售您的门票
2019/08/01 全球购物
委托书样本
2014/04/02 职场文书
2015年会计人员工作总结
2015/05/22 职场文书
推销搭讪开场白
2015/05/28 职场文书
Python3的进程和线程你了解吗
2022/03/16 Python
MySQL sql模式设置引起的问题
2022/05/15 MySQL
Python如何加载模型并查看网络
2022/07/15 Python
win10滚动条自动往上跑怎么办?win10滚动条自动往上跑的解决方法
2022/08/05 数码科技