php中构造函数与析构函数详解

 更新时间:2016年11月25日 15:04  点击:1718
在php中构造函数与析构函数都是使用在类中的,下面我来给大家详细介绍关于在php类中使用构造函数与析构函数的方法,有需要了解的朋友可参考参考。

析构函数

php析构函数的作用刚好和构造函数相反,构造函数是在对象实例化时自动执行,而析构函数在对象被销毁时自动执行。

默认情况下,php仅释放对象属性所占用的内存,并不销毁对象相关的资源,而利用析构函数在使用一个对象之后执行代码来清除内存,并将对象从内存中销毁。析构函数__destruct()结构形式如下:

 代码如下 复制代码

 function __destruct(){
    /* class initialization code */
}

析构函数是由系统自动调用,不能带参数。

实例:

 代码如下 复制代码

<?php
 class des{
  function __destruct(){
   echo "运行结束,执行析构函数";
  }
 }
 $p=new des(); /* 实例化类 */
 $sum=0;
 for($i=0;$i<10;$i++){
  $sum=$sum+$i;
  echo $sum ."<br>";
 }
?>

析构函数的调用

php如何调用析构函数?当php脚本不再与对象相关时将调用析构函数。如果要明确地销毁一个对象调用析构函数,可以给指向对象的变量不分配任何值,通常将变量赋值为NULL或者用unset()函数。

实例:

 代码如下 复制代码

<?php
 class des{
  function __destruct(){
   echo "对象被销毁,执行析构函数<br>";
  }
 }
 $p=new des(); /* 实例化类 */
 echo "程序开始<br>";
 unset($p); /* 销毁变量$p */
 echo "程序结束";
?>

构造函数

我们在使用类的过程中,有时需要立即为实例化对象的多个字段父子,如果通过手工,会带来很多不可预测的问题,而如果在对象创建过程中自动执行,则会带来很多方便。

php构造函数作用就是当类被实例化时,会自动执行的函数,又称为构造函数。

构造函数的声明和其它函数一样,知识构造函数的名称是“__construct”固定的名称,其结构形式如下:

 代码如下 复制代码

function __construct([argument1,argument2,argument3]){
    /* class initialization code */
}

实例:

 代码如下 复制代码

<?php
 class user{
  public $name;
  private $password;
  private $login;
  public function __construct($name,$password){
   $this->name=$name;
   $this->password=$password;
   $this->login=time();
  }
  function getlogin(){
   return(date('M d,Y',$this->login));
  }
 }
 $user=new user('Marry','888888');
 echo "用户名: ". $user->name. "<br>";
 print("访问时间". $user->getlogin());
?>

调用父类构造函数

构造函数可以被子类调用,php调用父类构造函数时必须使用parent关键字,否则不会自动调用。

实例:

 代码如下 复制代码

<?php
 class task1{
  public function __construct(){
   echo "today is Monday". "<br>";
  }
 }
 class task2 extends task1{
  function __construct(){
   parent::__construct(); /* 调用父类构造函数 */
   echo "I must work!";
  }
 }
 new task2;
?>

本文章给大家介绍在php中类和对象的protected与const属性用法,有需要了解的朋友可参考参考。

const属性
用const属性定义的字段是一个常量,类中的常量和静态变量类似,不同之处就是常量的值一旦赋值不能被改变。

const定义常量不需要加$符号,其结构形式如下:

const 常量名称  //常量名称不能用$符号

实例:

 代码如下 复制代码

<?php
 class Date{
  const M="Monday";
 }
 echo "today is ".Date::M;
?>


提示:使用const定义的常量名称一般都大写,这是一个约定,我们要养成一个良好的命名方式习惯。如果定义的常量由多个单词组成,则使用下划线_链接,这也是一个约定。例如:FILE_SIZE。

protected属性

protected限定的字段作用域在public和private之间,若该成员被声明称protected(保护),则代表只能在该类和该类的子类中使用该字段。

实例:

 代码如下 复制代码

<?php            
 class me{          
 protected $Money =100;       
 protected $price1=60;        
 
 public function Sell($price){      
  if($this->price1<=$price){      
   echo "好,卖给你了。<br>";     
   $this->Money = $this->Money+$price;  
   return "我现在总共有 ".$this->Money." 元钱"; 
  }
 else{           
  echo "我不卖 ,$price 太便宜了<br>";    
  return "现在我还是 ".$this->Money." 元钱";  
   }
  }
 }
 
 $now=new me;          
 echo $now->Sell(30);         
?>

在php中final static $this关键字主要是用在类中或对象中,下面我来把我学习final static $this笔记记录下来,有需要了解的朋友可参考参考。

final关键字

php final关键字用来在一个函数或者类名称前面,表明该函数不能被重写或者该类不能被继承。

1、final方法不能被重写。

如果不希望类中某个方法被子类重写,只需要在这个方法前加上关键字final,即设置final方法。

实例:

 代码如下 复制代码

<?php
 class ex1{
  final function fn1(){
   return "php";
  }
 }
 class ex2 extends ex1{
  function fn1(){
   return "html";
  }
 }
 $p= new ex2();
 echo $p->fn1();
?>

加了final关键字的方法不能被重写,运行出错。

2、final类不能被继承。

被声明了final的类不能被继承,否则出错。

实例:

 代码如下 复制代码

<?php
 final class ex1{
  private $name;
 }
 class ex2 extends ex1{
  private $age;
 }
?>

static关键字

php static关键字不仅可以用来声明一个静态变量,在类中同样可以声明静态的属性或者方法,成为“类属性”或“类方法”。

1、声明了静态的属性和方法后,在类中不能用$this关键字来引用,可以使用下面两种方法引用:

在类中:self::静态成员名称

在类外:类名称::静态成员名称

2、访问该类时,可不必实例化,直接使用类名称::静态成员名称的格式。

静态属性实例:

 代码如下 复制代码

<?           
 class user{        
 private static $count = 10;    
 private static $sum=1;     
 public function __construct(){    
 for($i=1;$i<11;$i++){      
  self::$sum = self::$sum * self::$count; /* 调用静态变量 */
  self::$count--;      
 }   
 }
 public function getCount(){    
  return self::$sum;     
 }
 }
 $user1 = new user();      
 echo $user1->getCount();  
?>

静态方法实例:

 代码如下 复制代码

<?             
 class Math{           
  public static function sum($num1,$num2){  
  return $num1 + $num2;       
  }
  public static function product($num1,$num2){
  return $num1 * $num2;       
 }
  }   
 $a = 88;           
 $b = 100;          
 echo "两数之和为: ";        
 echo "<br>";          
 echo Math::sum($a,$b);       
 echo "<P>";          
 $a = 66;           
 $b = 88;           
 echo "两数之积为: ";        
 echo "<br>";          
 echo Math::product($a,$b);       
?>

$this关键字

为了解决php类和对象中变量与属性的命名冲突和不确定性问题,引入了”$this”关键字来调用当前的对象。

在类中调用当前对象的属性和方法,必须使用”$this->”关键字;
$this在构造函数中指该构造函数所创建的新对象;
方法内的局部变量不属于对象,不使用$this关键字取值。
使用$this关键字,我们可以在类中调用对象属性或者方法。

1、调用变量

实例:

 代码如下 复制代码

<?php
 class user{
  private $n;
  function __construct(){
   $name="Mike";
   echo $this->n=$name;
  }
 }
 $p=new user();
?>


2、调用方法

实例:

 代码如下 复制代码

<?php
 class cal{
  public function sum($a,$b){
   return $a+$b;
  }
  public function prt($a,$c){
   return $a*$c;
  }
  public function result($a,$b,$c){
   $a=$this->sum($a,$b);
   return $this->prt($a,$c);
  }
 }
 $c=new cal();
 echo "(2+3)*10= " .$c->result('2','3','10');
?>

在php中函数是常用的一种合理的可以重复使用的方法,函数分别系统函数与用户自定义函数,下面我来给大家介绍这两种php函数的使用方法,有需了解的朋友可参考。

系统函数

如phpinfo() ;这就是一个系统函数了,关于系统函数我们不多说,直接参考php教程或手册都会有。

用户自定义函数

php 引入函数的概念使程序变得简洁,运算效率更快。函数是实现某种功能的一段程序,这段程序相当于一个模块,需要时用一些简单的命令就可以调用出来使用,不用每次都重新编写。就好象电脑,我们不需要了解里面的复杂结构,只要了解它提供的功能直接使用即可。

php自定义函数-php虽然内置了很多实用的函数,可是不可能满足实际设计的需要,这时我们就需要自己创建函数。

基本结构形式:

 代码如下 复制代码

function 函数名(参数){
 语句体
}

function为声明函数;

函数名必须唯一,和变量名不同的是函数名不区分大小写;
function和函数名之间必须要有空格;
参数可以省略,也可以添加多个参数,用英文逗号隔开。
php调用函数-当我们定义了函数后,就可以通过以下结构形式对函数进行调用:

函数名(参数)

参数可以省略,但必须保留括号。
实例:

 代码如下 复制代码

<?php
 function e(){
  $i=5+6;
  echo $i;
 }
 e();
?>

函数的传递参数

如果函数定义了参数,那么在调用函数时就必须注意参数值的传递问题。php函数参数传递的方式有两种:按值传递和引用传递,默认为按值传递。

1、按值传递:

实例1:

 代码如下 复制代码

<?php
 function sum($num,$price){
  $total=$num*$price;
  echo "总价格为:$total";
 }
 sum(10,78);
?>

默认参数

php函数默认参数-如果用一个函数时并没有提供该参数的值,那么该参数将使用函数制定的默认值,默认值必须已经在函数定义时赋值。

实例:

 代码如下 复制代码

<?php
 function add($a,$b=10){  /* 定义变量$b默认参数 */
  $sum=$a+$b;
  echo $sum ."<br>";
 }
 add(1,5);   /* 按值传递参数代替默认参数 */
 add(1);    /* 没有给$b传递参数将采用默认值 */
?>

函数返回值

我们在设计程序时,很多时候不希望将函数的运行结果直接在浏览器显示出来,这时可以通过return语句先将函数值调用出来再进行其它操作。

php函数返回值实例:

 代码如下 复制代码

<?php
 function add($a,$b=10){  
  $sum=$a+$b;
  return $sum; /* 将$sum的值赋给函数 */
 }
 $sum=add(1,5);  /* 这里变量$sum得到函数的值 */   
 echo $sum ."<br>";
?>

函数嵌套调用

函数的内部不但可以是一般的执行语句,也可以是函数,这就是php函数嵌套的用法。

函数嵌套只一个函数里面还调用了其它函数,这里要理解的是各函数均处于平行关系,函数的定义是独立的。就像一个容器里面可以放置很多个小容器,而这些容器彼此独立,各自容纳自己的东西。

实例:

 代码如下 复制代码

<?php
 function volume($l,$w){
  function height($a){
   $a=$a/2;
   return $a;
  }
  $a=$l*$w;
  $v=$a*height($a);
  echo $v;
 }
 volume(8,3);
?>

函数递归调用

什么是php递归函数?在解释这个概念之前,我们先来看一个数学例子。如果要算出n的阶乘,即n!,则首先应该知道(n-1)!,而要知道(n-1)!,又必须知道(n-2)!。以此类推,直至1!=1,再返回计算2!,3!…(n-1)!,n!,才能最终得出n阶乘的结果。

php函数递归调用的含义就是函数能够调用自身,这种直接或者简介调用函数本身的操作在php语言中是允许的,成之为递归函数。

实例:

 代码如下 复制代码

<?php
 function calculate($n){
  if($n==0)
  return 1;
  else
  return $n*calculate($n-1);
 }
 $s=calculate(3);
 echo $s;
?>

cookie是所有程序中都会用到的一个会话,下边我把我学习php cookie 的笔记分享给各位同学,本文章介绍了所有关于cookie入门篇的小技巧,有需要的同学可参考。

Cookie是什么意思?

Cookie是用来存储用户名、密码、访问该站点的次数等。在访问某个网站时,Cookie将html网页发送到浏览器中一个小段信息,以脚本的形式保存在客户端的计算机上。

Cookie有什么用?如果用服务器去记录个用户上站的次数,那么长期积累下来数据必然十分庞大,对服务器来说负担很中。因此,可以将数据存入到用户自己的计算机中,等到需要时服务器再读取用户计算机上的Cookie提取数据,这样一来服务器就不需要记录大量的数据。


一般来说,Cookie通过HTTP Headers从服务器端返回浏览器。首先,服务器端在响应中利用Set Cookie Header来创建一个Cookie。然后浏览器在请求中通过Cookie Header包含这个已经创建的Cookie,并且将它返回至服务器,从而完成浏览器的验证。


Cookie的创建

php创建一个Cookie需要调用setcookie()函数,其结构形式如下:

bool setcookie(string name[,string value[,int expiration[,string path[,bool secure]]]])
参数name表示Cookie的名称,其它参数可选;
参数value是存入Cookie的值;
参数expiration指定Cookie过期的时间;
参数path指定Cookie在服务器上的有效路径,用来设置Cookie将被发送到服务器的那一个文件夹下;
参数secure指定Cookie是否通过安全的https链接发送。
php cookie实例代码:

 代码如下 复制代码

<?php
 setcookie("c1","my name is Rose",time()+3600);
 /* 建立一个名称为"c1"的cookie 过期时间为3600秒 */
?>

cookie的访问

大多数变量只在内存占用空间,因此当php脚本终结时变量也从内存中被释放清空。而Cookie可以将变量的值长期存储到用户计算机的硬盘,当我们需要调用此变量的值时,读取该Cookie的名称即可。

前面一节Cookie的创建已经建立了一个命名为”c1″的Cookie,下面我们来测试一下这个Cookie是否成功创建了。

php 访问Cookie的实例:

 代码如下 复制代码

<?php
 echo "c1的Cookie值是 " .$_COOKIE['c1'] ."<br>";
 echo "c2的Cookie值是 " .$_COOKIE['c2'];
?>

Cookie的时间

如果没有设置Cookie的有效时间,那么当关闭浏览器时Cookie就会消失。如果要保留Cookie,就必须给它设置一个有效的时间。

php Cookie时间设置方法:

 time()+秒数
time()表示目前用户操作系统的时间,后面的秒数即是Cookie的有效时间。如果要制定一个特定的日期,可以使用mktime()函数,其结构形式如下:

 mktime(时,分,秒,月,日,年)
如果要立即删除一个Cookie,可以将时间设置成过去的一个时间即可。

php Cookie时间设置例子:

 代码如下 复制代码
setcookie("a","10",time()-60); /* 设置时间为之前60秒,其值立即被删 */
setcookie("a","10",time()+60); /* 设置有效时间为60秒 */
setcookie("a","10",mktime(0,0,0,11,1,2011)); /* 失效时间为2011年11月1日0点0分0秒 */

下面介绍一个利用Cookie设计的一个简单统计程序:

 代码如下 复制代码

<?php
 $count=$_COOKIE['user'];
 $count++;
 setcookie("user",$count,time()+3600); 
 echo "这是你的第 $count 次访问!";
?>

Cookie数组

我们同样可以创建一个php cookie数组,下面通过实例介绍实现方法。

代码:

 代码如下 复制代码
<?php
 setcookie('name[1]','Rose');
 setcookie('name[2]','John');
 setcookie('name[3]','Mikle');
 if(is_array($_COOKIE['name'])){ /* 判断是否数组 */
  foreach($_COOKIE['name'] as $name=>$value) {
   echo "$name:$value<br>";
  }
 }
 else echo "不是数组";
?>


Cookie的限制

Cookie是用来存储用户浏览网站的重要信息,为了防止乱用导致用户的信息泄露,所以对Cookie作出一定的限制:

浏览器记录用户cookie大小限制在4KB以内的容量;
浏览器只保存某个站点服务器的Cookie数量限制在20个,如果超出这个数量,则之前保存的会被删除。
每个用户的浏览器最多只能访问300个Cookie。
用户可以在浏览器设置是否启用Cookie存储信息,因此,要使用Cookie存储信息,必须先确认浏览器中Cookie的功能是否已经打开。例如IE9浏览器,打开“属性”–“隐私”–“高级”选项,选中启用即可:


提示:浏览器创建了一个Cookie之后,对于每个针对该网站的请求都会在Header中带着这个Cookie。而且浏览器会一直发送,知道Cookie过期位置。不过对于其它网站的请求,Cookie是绝对不会跟着发送的。

[!--infotagslink--]

相关文章

  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

    废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
  • PHP函数strip_tags的一个bug浅析

    PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数...2014-05-31
  • SQL Server中row_number函数的常见用法示例详解

    这篇文章主要给大家介绍了关于SQL Server中row_number函数的常见用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08
  • PHP加密解密函数详解

    分享一个PHP加密解密的函数,此函数实现了对部分变量值的加密的功能。 加密代码如下: /* *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ //加密函数 srand(...2015-10-30
  • php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法

    最近遇到一个问题,就是在使用php的mail函数发送utf-8编码的中文邮件时标题出现乱码现象,而邮件正文却是正确的。最初以为是页面编码的问题,发现页面编码utf-8没有问题啊,找了半天原因,最后找到了问题所在。 1.使用 PEAR 的...2015-10-21
  • C#中加载dll并调用其函数的实现方法

    下面小编就为大家带来一篇C#中加载dll并调用其函数的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#虚函数用法实例分析

    这篇文章主要介绍了C#虚函数用法,实例分析了C#中虚函数的功能与基本使用技巧,需要的朋友可以参考下...2020-06-25
  • PHP编码转换函数mb_convert_encoding与iconv用法

    文章来实现一个PHP编码转换函数mb_convert_encoding与iconv用法,希望例子能帮助到各位。 将一个短信接口代码从apache迁移到nginx+php-fpm后,发现无法发出短信了,查...2016-11-25