构造函数和析构函数

来源:互联网 发布:图像复原的数据集 编辑:程序博客网 时间:2024/06/03 23:50

构造方法又称为构造函数,是对象创建时自动调用的方法,用来完成类初始化的工作。

构造函数:

用来实现对一个类的构造,例如一个类里

//无参的

public function __construct()
 {
 }

//有参数的

public function __construct($name,$pass)
 {
  $this->$uname = $name;
  $this->$upass = $pass;
 }

 
析构函数:当某个对象成为垃圾或者当对象被显示销毁时执行

__destruct()会在类中所有的功能都执行完毕后执行,如果类名=null,就是等于只强制执行__destruct()函数,
那么__destruct()写在类中的时候,仅仅是个空方法,让编程者往里写编写功能,里面不写代码就什么也不执行,还说是就算是
function __destruct(){};这样写出来它也会执行某些操作。
 
.
在类外直接使用系统函数mysql_close()和在类内有是点区别的。在一般情况下,PHP在执行结束后,即使不手动释放数据库资源,
PHP解释器也会自动地释放,为了避免一些未知的可能突发情况,在程序里面手动释放资源是一种比较好的习惯。
   PHP与MYSQL连接成功后,有一个连接句柄,关闭数据库连接其实是关闭连接。当你的程序只有一个连接句柄时,
可以直接使用mysql_close(),而不用参数,此函数默认是关闭这个函数顶上的一个数据库操作的句柄,当程序存在几个连接时,
就会用到参数了,这个你应该是明白的,就不详细解释了。至于你问到的为何还要用析构函数,把关闭连接放入到析构函数里面的问题,
这个是PHP面向对象带来的方便,防止在写客户程序时忘记释放资源(虽然PHP会自动在执行完毕后,释放连接,但是内部机制不会说你
程序员想什么时候结束就什么时候结束,这涉及了效率优化的问题了,在析构函数里面关闭的作用是,当连接对象在回收前,自动执行
资源的释放,这相对于这对象被回收后,PHP程序继续执行其它部份的时候还没有释放连接是有优势的,当然更加鼓励程序员手动执行关闭)。
在这里再解释一下,什么是客户端程序,我指的不是B/S架构的客户端,不是DIV+CSS那些前端的东西,我说的是在MVC三层架构里面的,
分层的具体作用你自己再百度,这客户端程序在三层架构里面是另外的层对于M来说的,数据库操作部分在M中完成,假设是由一特定的程序员编写的,
他只要提供API给C层(控制层)就行了,编写控制层的人只是调用M的API,假设编写控制层的程序员在使用M的API时(也就是使用了数据库操作,包括连接)
忘记了关闭资源连接的话,M层提供的API所产生的对象在被回收前,PHP解释器会关闭连接释放资源(析构函数在这里的作用)。PHP面向对象带来
的不只是简单的类和对象,而是面向对象的开发方式~
  “就是当PHP程序结束时,会释放数据库连接”的说法对于你这个问题是错误的,因为你这个释放连接应该
是在对象被回收后释放,而不是等待到整个PHP程序都执行结束才释放资源。


GC(Garbage Collector):在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内存中销毁。

这是PHP的GC(Garbage Collector)垃圾处理机制,防止内存溢出。当一个PHP线程结束时,当前占用的所有内存空间都会被销毁


public,protected,private
不叫作用域,是访问权限 public声明的变量及方法,表明在整个包内包外都可使用。

private 声明的变量及方法,只在声明的类内可以使用。 protected包外不可使用。包内可以使用。 不使用关键字默认为包内使用。

另外注意在继承的时候,他们的区别。 public 声明的在子类变为public protected 声明的子类变为private private 声明的在子类中

不可用 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × ×

private √ × × × 不写时默认为friendly

0 0