一步一步学习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 相关文章推荐
提升PHP执行速度全攻略(上)
Oct 09 PHP
最小化数据传输――在客户端存储数据
Oct 09 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
Jan 10 PHP
解析yahoo邮件用phpmailer发送的实例
Jun 24 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
Jan 03 PHP
php轻松实现中英文混排字符串截取
May 28 PHP
如何让thinkphp在模型中自动完成session赋值小教程
Sep 05 PHP
浅谈php+phpStorm+xdebug配置方法
Sep 17 PHP
php登录超时检测功能实例详解
Mar 21 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
Jan 15 PHP
php实现的顺序线性表示例
May 04 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
Oct 11 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
yii用户注册表单验证实例
2015/12/26 PHP
php+ajax无刷新上传图片的实现方法
2016/12/06 PHP
DIY jquery plugin - tabs标签切换实现代码
2010/12/11 Javascript
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
Jquery 获取指定标签的对象及属性的设置与移除
2014/05/29 Javascript
js脚本实现数据去重
2014/11/27 Javascript
javascript每日必学之运算符
2016/02/16 Javascript
JQuery实现列表中复选框全选反选功能封装(推荐)
2016/11/24 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
2017/01/13 Javascript
canvas绘制环形进度条
2017/02/23 Javascript
React利用插件和不用插件实现双向绑定的方法详解
2017/07/03 Javascript
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
Vue多种方法实现表头和首列固定的示例代码
2018/02/02 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
微信小程序云开发如何使用云函数生成二维码
2019/05/18 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
js实现简单图片拖拽效果
2021/02/22 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
netbeans7安装python插件的方法图解
2013/12/24 Python
Python查看多台服务器进程的脚本分享
2014/06/11 Python
Python基于Tkinter实现的记事本实例
2015/06/17 Python
Python设计模式之抽象工厂模式
2016/08/25 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
python小程序基于Jupyter实现天气查询的方法
2020/03/27 Python
python中实现词云图的示例
2020/12/19 Python
大三毕业自我鉴定
2014/01/15 职场文书
营销总经理岗位职责
2014/02/02 职场文书
市级文明单位申报材料
2014/05/07 职场文书
大型活动组织方案
2014/05/10 职场文书
学校节能宣传周活动总结
2014/07/09 职场文书
第二批党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
污染环境建议书
2015/09/14 职场文书
MybatisPlus EntityWrapper如何自定义SQL
2022/03/22 Java/Android
maven 解包依赖项中的文件的解决方法
2022/07/15 Java/Android