1.类与对象

对象:实际存在该类事物中每个实物的个体。$a =new User(); 实例化后的$a

引用�php的别名,两个不同的变量名字指向相同的内容

封装: 把对象的属性和方法组织在一个类(逻辑单元)里

继承:以原有的类为基础,创建一个新类,从而代码复用的目的;

多态:允许将子类类型的指针赋值给父类类型的指针。

-------------------------------------

2.自动加载对象:

自动加载通过定义特殊的__autoload函数,当引用没有在脚本中定义的类时会自动调用这个函数.

1 [php] view plaincopyprint?

2 function __autoload($class){

3 require_once("classes/$class.class.php");

4 }

为什么要使用__autoload

1,首先是不知道这个类文件存放在什么地方,

2,另外一个就是不知道什么时候需要用到这个文件。

3,特别是项目文件特别多时,不可能每个文件都在开始的部分写很长一串的 require …

替代了一

require_once ("classes/Books.class.php") ;

require_once ("classes/Employees.class.php" ) ;

require_once ("classes/Events.class.php") ;

require_once ("classes/Patrons.class.php") ;

zend推荐了一种最流行的办法,在文件名中包含路径。例如下面的例子:

1 [php] view plaincopyprint?

2

3 view sourceprint?

4 // Main.class

5 function __autoload($class_name) {

6 $path = str_replace('_', DIRECTORY_SEPARATOR, $class_name);

7 require_once $path.'.php';

8 }

temp = new Main_Super_Class();

所有的下划线都会被替换成路径中的分隔符,上例中就会去 Main/Super/Class.php文件。

缺点:

是在编码过程中,必须明确的知道代码文件应当所处的位置,

而且由于将文件路径硬编码在了类名中,如果需要修改文件夹的结构时,我们必须手工修改所有的类名。

如果是在一个开发环境中,并且对于速度不是很在意的话,使用'Include All’这个方法是非常方便的。

通过将所有类文件放在一个或几个特定文件夹中,然后通过遍历的方式查找加载。

例如

<?php

$arr = array (

'Project/Classes',

'Project/Classes/Children',

'Project/Interfaces'

);

foreach($arr as $dir) {

$dir_list = opendir($dir);

while ($file = readdir($dir_list)) {

$path = $dir.DIRECTORY_SEPARATOR.$file;

if(in_array($file, array('.', '..')) || is_dir($path))

continue;

if (strpos($file, ".class.php"))

require_once $path;

}

}

?>

另外一个方法是在类文件和他的位置之间建立关联的配置文件,例如:

view sourceprint?

// configuration.php

array_of_associations = array(

'MainSuperClass' = 'C:/Main/Super/Class.php',

'MainPoorClass' = 'C:/blablabla/gy.php'

);

调用的文件

<?php

require 'autoload_generated.php';

function __autoload($className) {

global $autoload_list;

require_once $autoload_list[$className];

}

$x = new A();

?>

3.构造函数和析构函数

PHP 构造方法 __construct() 允许在实例化一个类之前先执行构造方法。

构造方法是类中的一个特殊方法。当使用 new 操作符创建一个类的实例时,构造方法将会自动调用,其名称必须是 __construct() 。

(在一个类中只能声明一个构造方法,而是只有在每次创建对象的时候都会去调用一次构造方法,不能主动的调用这个方法,

所以通常用它执行一些有用的初始化任务。该方法无返回值。)

作用: 用来创建对象时初始化对象

子类执行分类的构造函数parent::__construct().

析构函数: __destruct ()定义:特殊的内成员函数,没有返回类型,没有参数,不能随意调用,也没有重载;

只是在类对象生命结束的时候,由系统自动调用释放在构造函数中分配的资源。

与构造方法对应的就是析构方法,析构方法允许在销毁一个类之前执行的一些操作或完成一些功能,比如说关闭文件、释放结果集等。

析构函数不能带有任何参数,其名称必须是 __destruct() 。

PHP 类与对象 全解析方法的更多相关文章

  1. PHP 类与对象 全解析(三)

    目录 PHP 类与对象 全解析( 一) PHP 类与对象 全解析( 二) PHP 类与对象 全解析(三 ) 13.魔术方法 定义:PHP把所有以__(两个下划线)开头的类方法当成魔术方法     __ ...

  2. PHP 类与对象 全解析( 二)

    目录 PHP 类与对象 全解析( 一) PHP 类与对象 全解析( 二) PHP 类与对象 全解析(三 ) 7.Static关键字 声明类成员或方法为static,就可以不实例化类而直接访问.不能通过 ...

  3. PHP 类与对象 全解析( 一)

    目录 PHP 类与对象 全解析( 一) PHP 类与对象 全解析( 二) PHP 类与对象 全解析(三 ) 1.类与对象 对象:实际存在该类事物中每个实物的个体.$a =new User(); 实例化 ...

  4. 你不知道的JavaScript--Item22 Date对象全解析

    本篇主要介绍 Date 日期和时间对象的操作. 1. 介绍 1.1 说明 Date对象,是操作日期和时间的对象.Date对象对日期和时间的操作只能通过方法. 1.2 属性 无: Date对象对日期和时 ...

  5. day 23 对象的名称空间 类,对象属性和方法 封装 接口提供

    一.对象的特有名称空间 # 对象独有的名称空间:在产生对象时就赋初值 '''class ted: def func(): 当func里不存在参数时,调用时不需要给值 print('hah')ted.f ...

  6. 类的封装,property特性,类与对象的绑定方法和非绑定方法,

    类的封装 就是把数据或者方法封装起来 为什么要封装 封装数据的主要原因是:保护隐私 封装方法的主要原因是:隔离复杂度(快门就是傻瓜相机为傻瓜们提供的方法,该方法将内部复杂的照相功能都隐藏起来了,比如你 ...

  7. JS创建类和对象(好多方法哟!)

    http://www.cnblogs.com/tiwlin/archive/2009/08/06/1540161.html 这是别人写的~~~我借来看看 JavaScript 创建类/对象的几种方式 ...

  8. JavaScript定义类与对象的一些方法

    最近偶然碰到有朋友问我"hoisting"的问题.即在js里所有变量的声明都是置顶的,而赋值则是在之后发生的.可以看看这个例子: 1 var a = 'global'; 2 (fu ...

  9. java类与对象(属性,方法)的使用

    ---恢复内容开始--- 类和对象是java编程中很重要的应该面向对象的一课,实际上可以将类看作对象的载体,它定义了对象所具有的功能.Java是面向对象的语言,因此掌握类与对象是学习Java语言的基础 ...

随机推荐

  1. CF773E Blog Post Rating

    题意:有一篇博客.一共有n个人,心中有他们期望该博客得到的赞数a[i].当某个时刻该博客的获赞数<a[i],则该人会使得赞数+1,当赞数>a[i],该人会使得赞数-1,当赞数=a[i],不 ...

  2. 阿里云ECS发送邮件失败

    阿里云发送SMTP邮件失败   N多测试发现 阿里云服务器不能用25端口发邮件,配置465端口阿里云发送邮件是成功的 修改mail.rc 里的smtp 端口为465 配置如下 set from=*** ...

  3. Photoshop基本操作

    PS 工具是我们使用频率比较高的软件之一, 我们学习PS目的不是为了设计海报做电商和UI的,而是要求: 会简单的抠图 会简单的修改PSD效果图 熟练的切图 能和网站美工美眉有共同话题..... Pho ...

  4. thinkphp扩展配置

    扩展配置可以支持自动加载额外的自定义配置文件,并且配置格式和项目配置一样. 设置扩展配置的方式如下(多个文件用逗号分隔): // 加载扩展配置文件 'LOAD_EXT_CONFIG' => 'u ...

  5. bfs理解——hdu6386好题

    用队列维护,对于每块颜色相同的相连的边进行dfs并记录即可 注意这题要用vis来标记边,不可以标记点 因为点的深度是可以随时更新的(这样的做法不满足贪心条件) #include<bits/std ...

  6. 计算几何——直线交点poj1269

    求直线交点还是要推一个公式的.. 见博客https://blog.csdn.net/u013050857/article/details/40923789 还要学一下向量的定点比分法 另外poj精度好 ...

  7. rancher v2.2.4创建kubernetes集群出现[etcd] Failed to bring up Etcd Plane: [etcd] Etcd Cluster is not healthy

    主机:rancher(172.16.2.17),master(172.16.2.95),node01(172.16.2.234),node02(172.16.2.67) 问题:开始是用的rancher ...

  8. 总结加密、机密jar中的class

    1.加密和解密部署到jboss中间件中的的单个class文件,原理:使用“java源程序加密解决方案(基于Classloader解密) (2014-07-13 11:31)”blog即可实现: imp ...

  9. Java学习之Java历史版本

    Java有三个版本,标准版Java SE,企业版Java EE,移动版Java ME.按理来说,每一种版本都会有自己的版本号,但是约定俗成:JDK版本号=Java SE版本号=Java版本号,这是因为 ...

  10. Django之跨表查询——正反向查询(ManyToManyField)

    1.多对多查询:涉及到两张表以上的查询. author_obj = models.Author.objects.first() print(author_obj.name) # 查询金老板写过的书 r ...