一步一步学习PHP(3) php 函数


Posted in PHP onFebruary 15, 2010

1. 方法概述

首先,写一个最简单的函数,大家看一眼就可以了:

<html>
<head>
  <title>HelloPHP</title>
</head>
<body>
  <?php
    function CustomPrint($str)
    {
      for($i=0;$i<5;$i++)
      {
        echo($str);
        echo('<br/>');
      }
    }
    
    CustomPrint("Hello");
  ?>
</body>
</html>

通过这个例子,相信大家都了解了PHP中函数的大致写法,至于语法上,和其他类C语言差别不大,也都是while,for,if等,至于其他不同之处,会在之后的文章中,逐渐来说。

OK,那我来总结一下,这个方法的要点:

A. PHP的方法用function来声明,这一点类似于我们熟悉的Javascript.

B. 在使用变量必须要以美元符($)来开头。

2. 参数的引用传递和值传递

参数的值传递和引用传递,相信每个人在学习C语言时都接触到了,在此用C#来写例子:

public void Swap(int a, int b)
{
  int temp = a;
  a = b;
  b = temp;
}
public void Swap(ref int a, ref int b)
{
  int temp = a;
  a = b;
  b = temp;
}

那在这里就写一个PHP版本。

<?php
    function Swap1($a,$b)
    {
      $temp=$a;
      $a=$b;
      $b=$temp;
    }
    function Swap2(&$a,&$b)
    {
      $temp=$a;
      $a=$b;
      $b=$temp;
    }
    
    function CustomPrint($str)
    {
      echo($str);
      echo("<br/>");  
    }
    
    $a=1;
    $b=2;
    Swap1($a,$b);
    CustomPrint("值传递的结果:");
    CustomPrint('$a='.$a);
    CustomPrint('$b='.$b);
    $a=1;
    $b=2;
    Swap2($a,$b);
    CustomPrint("引用传递的结果:");
    CustomPrint('$a='.$a);
    CustomPrint('$b='.$b);
  ?>

在这个例子中:有两点我需要说明:

A. 值传递和引用传递的区别在于在参数前的“&”.

B. CustomPrint('$a='.$a);在这句中,需要特殊说明一下单引号和双引号的区别,他们之间只有一个区别,就是能否解析变量名,这个例子就足够说明问题了:

<?php 
    $a=1;
    echo("$a");
    echo("<br/>");
    echo('$a');
  ?>

 

一步一步学习PHP(3) php 函数 

最后,说下关于性能的问题,在按值传递时,PHP需要进行复制,然后再传递,这样如果那些大对象或者字符串的话,就会不仅仅耗费时间,而且对空间也是一种浪费。这时,如果进行引用传递,就免去了耗费性能的复制操作。对性能提高很有好处。

3. 作用域问题

在C#中,由于变量在使用之前必须声明,因此会涉及到一个作用域和子作用域的概念,而在PHP中则没有这样的概念。

我们来看一段C#代码:

public class Student
{
  private string name;
  public void SayHello()
  {
    HttpContext.Current.Response.Write("Hello,I am " + name);
  }
}

也就是说,在方法内可以访问外部类声明的变量,但是在PHP中则不一样:

<?php 
    $name="kym";
    function SayHello()
    {
      if(isset($name))
      {
        echo("Hello $name");  
      }
      else
      {
        echo('$name is undefined');
      }
    }
    SayHello();
  ?>

一步一步学习PHP(3) php 函数

这里说明一个函数“isset”,这个函数可以检测一个变量是否被定义,或者是否是空字符串。

那么这个结果说明,在函数体内,无法访问到外部变量$name。

在这里在多提一点:一个与unset对应的函数:unset。该函数用于移除一个变量的值。

写个简单的例子:

<?php 
  $name="kym";
  if(isset($name))
  {
    echo("Yes");
  }
  else
  {
    echo("No");
  }
  unset($name);
  if(isset($name))
  {
    echo("Yes");
  }
  else
  {
    echo("No");
  }
?>

 

一步一步学习PHP(3) php 函数

关于这些会在之后的垃圾回收里详细提及。

PHP 相关文章推荐
set_include_path在win和linux下的区别
Jan 10 PHP
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
Mar 28 PHP
PHP中全面阻止SQL注入式攻击分析小结
Jan 30 PHP
php上传文件中文文件名乱码的解决方法
Nov 01 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
Dec 25 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
PHP静态文件生成类实例
Nov 29 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
Aug 21 PHP
php遍历替换目录下文件指定内容的方法
Nov 10 PHP
Yii输入正确验证码却验证失败的解决方法
Jun 06 PHP
laravel手动创建数组分页的实现代码
Jun 07 PHP
PHP如何通过带尾指针的链表实现'队列'
Oct 22 PHP
一步一步学习PHP(2)――PHP类型
Feb 15 #PHP
一步一步学习PHP(1) php开发环境配置
Feb 15 #PHP
PHP生成网页快照 不用COM不用扩展.
Feb 11 #PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
Feb 09 #PHP
php 自写函数代码 获取关键字 去超链接
Feb 08 #PHP
PHP 手机归属地查询 api
Feb 08 #PHP
Memcache 在PHP中的使用技巧
Feb 08 #PHP
You might like
全国FM电台频率大全 - 5 内蒙古自治区
2020/03/11 无线电
PHP新手上路(三)
2006/10/09 PHP
php5 图片验证码实现代码
2009/12/11 PHP
php中定义网站根目录的常用方法
2010/08/08 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
PHP 实现手机端APP支付宝支付功能
2018/06/07 PHP
PHP基于swoole多进程操作示例
2019/08/12 PHP
javascript下string.format函数补充
2010/08/24 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
jquery实现select选中行、列合计示例
2014/04/25 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
c#+jquery实现获取radio和checkbox的值
2020/09/12 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
微信小程序网络请求wx.request详解及实例
2017/05/18 Javascript
详解node字体压缩插件font-spider的用法
2018/09/28 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
webpack.DefinePlugin与cross-env区别详解
2020/02/23 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
[02:08:58]2014 DOTA2国际邀请赛中国区预选赛 Ne VS CIS
2014/05/22 DOTA
Python的SQLAlchemy框架使用入门
2015/04/29 Python
Python实现合并字典的方法
2015/07/07 Python
Python入门之三角函数tan()函数实例详解
2017/11/08 Python
python3对接mysql数据库实例详解
2019/04/30 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
django创建css文件夹的具体方法
2020/07/31 Python
伦敦的高级牛仔布专家:Trilogy
2018/08/06 全球购物
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
如何删除一个表里面的重复行
2013/07/13 面试题
小学开学寄语
2014/01/19 职场文书
超市中秋节活动方案
2014/02/12 职场文书
户外活动总结范文
2014/04/30 职场文书
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android
Java数据结构之堆(优先队列)
2022/05/20 Java/Android