一步一步学习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显示MySQL数据的三种方法
Jun 05 PHP
php在字符串中查找另一个字符串
Nov 19 PHP
PHP Document 代码注释规范
Apr 13 PHP
组合算法的PHP解答方法
Feb 04 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
Aug 07 PHP
PHP实现把数字ID转字母ID
Aug 12 PHP
两种php给图片加水印的实现代码
Apr 18 PHP
php获取开始与结束日期之间所有日期的方法
Nov 29 PHP
django中的ajax组件教程详解
Oct 18 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 PHP
TP3.2框架分页相关实现方法分析
Jun 03 PHP
PHP标准库 (SPL)――Countable用法示例
Jun 05 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
PHP 实现explort() 功能的详解
2013/06/20 PHP
PHP MPDF中文乱码的解决方式
2015/12/08 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
ThinkPHP防止重复提交表单的方法实例分析
2018/05/10 PHP
javascript中自定义对象的属性方法分享
2013/07/12 Javascript
利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域
2013/12/14 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
jQuery Validate表单验证深入学习
2015/12/18 Javascript
深入浅析JavaScript中的constructor
2016/04/19 Javascript
js中获取键盘事件的简单实现方法
2016/10/10 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
2017/02/21 Javascript
input type=file 选择图片并且实现预览效果的实例
2017/10/26 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
2019/06/14 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
2019/08/13 Javascript
JS document对象简单用法完整示例
2020/01/14 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
[01:45:05]VGJ.T vs Newbee Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
Python守护线程用法实例
2017/06/23 Python
Python实现的爬虫功能代码
2017/06/24 Python
深入浅析Python的类
2018/06/22 Python
Django框架模板注入操作示例【变量传递到模板】
2018/12/19 Python
Python并发:多线程与多进程的详解
2019/01/24 Python
python文本数据处理学习笔记详解
2019/06/17 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
python Plotly绘图工具的简单使用
2020/03/03 Python
巴西服装和鞋子购物网站:Marisa
2018/10/25 全球购物
生物技术研究生自荐信
2013/11/12 职场文书
承认错误的检讨书
2014/01/30 职场文书
2014年冬季防火方案
2014/05/21 职场文书
2014年党总支工作总结
2014/12/18 职场文书
辩论赛新闻稿
2015/07/17 职场文书
《包身工》教学反思
2016/02/23 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书