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 相关文章推荐
一个好用的分页函数
Nov 16 PHP
php heredoc和phpwind的模板技术使用方法小结
Mar 28 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
Jun 25 PHP
php foreach循环中使用引用的问题
Nov 06 PHP
php防止伪造的数据从URL提交方法
Jun 27 PHP
详解PHP中的状态模式编程
Aug 11 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
Aug 01 PHP
PHP生成word文档的三种实现方式
Nov 14 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
Feb 24 PHP
yii2中关于加密解密的那些事儿
Jun 12 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
Sep 30 PHP
Laravel等框架模型关联的可用性浅析
Dec 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
php max_execution_time执行时间问题
2011/07/17 PHP
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
php获取网页里所有图片并存入数组的方法
2015/04/06 PHP
PHP实现简单数字分页效果
2015/07/26 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
jquery中获取select选中值的代码
2011/06/27 Javascript
60个很实用的jQuery代码开发技巧收集
2014/12/15 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
实例详解jQuery表单验证插件validate
2016/01/18 Javascript
通过修改360抢票的刷新频率和突破8车次限制实现方法
2017/01/04 Javascript
BootStrap 导航条实例代码
2017/05/18 Javascript
Vue.js 十五分钟入门图文教程
2018/09/12 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
在Vuex中Mutations修改状态操作
2020/07/24 Javascript
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
python实现三维拟合的方法
2018/12/29 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
2019/01/30 Python
Python自动抢红包教程详解
2019/06/11 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
使用Python做垃圾分类的原理及实例代码附源码
2019/07/02 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
浅谈Python中的生成器和迭代器
2020/06/19 Python
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
HelloFresh澳大利亚:订购你的美味食品盒、健康餐食
2018/03/28 全球购物
临床医学专业个人的自我评价
2013/09/27 职场文书
班主任工作年限证明
2014/01/12 职场文书
档案接收函
2014/01/13 职场文书
护士检查书
2014/01/17 职场文书
孝敬父母的演讲稿
2014/05/14 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
村党支部公开承诺书
2014/05/29 职场文书
安全施工责任书
2014/08/25 职场文书
环境卫生标语
2015/08/03 职场文书
高二语文教学反思
2016/02/16 职场文书
Docker下安装Oracle19c
2022/04/13 Servers
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
2022/09/23 MySQL