一步一步学习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 相关文章推荐
require(),include(),require_once()和include_once()的异同
Jan 02 PHP
PHP读取数据库并按照中文名称进行排序实现代码
Jan 29 PHP
php连接mssql数据库的几种方法
Feb 21 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
Mar 17 PHP
PHP两种去掉数组重复值的方法比较
Jun 19 PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 PHP
PHP之uniqid()函数用法
Nov 03 PHP
php有道翻译api调用方法实例
Dec 22 PHP
php获取错误信息的方法
Jul 17 PHP
SESSION存放在数据库用法实例
Aug 08 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
Aug 18 PHP
php读取本地json文件的实例
Mar 07 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代码
2006/12/06 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
PHP实现QQ登录的开原理和实现过程
2018/02/04 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
IE和Firefox下javascript的兼容写法小结
2008/12/10 Javascript
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
2008/12/29 Javascript
jquery中文乱码的多种解决方法
2013/06/21 Javascript
jQuery UI 实现email输入提示实例
2013/08/15 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
Vue.js快速入门实例教程
2016/10/15 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
详解Vue源码学习之双向绑定
2019/04/10 Javascript
VueCli3.0中集成MockApi的方法示例
2019/07/05 Javascript
vue实现图片上传预览功能
2019/12/23 Javascript
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python 远程统计文件代码分享
2015/05/14 Python
Python编程实现蚁群算法详解
2017/11/13 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
PyQt5创建一个新窗口的实例
2019/06/20 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
Pycharm使用远程linux服务器conda/python环境在本地运行的方法(图解))
2019/12/09 Python
keras 解决加载lstm+crf模型出错的问题
2020/06/10 Python
Python基于xlutils修改表格内容过程解析
2020/07/28 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的代码
2020/11/30 HTML / CSS
高中生学习总结的自我评价范文
2013/10/13 职场文书
移动通信专业自荐信范文
2013/11/12 职场文书
广告学专业推荐信范文
2013/11/23 职场文书
工地安全生产标语
2014/06/06 职场文书
法院干警四风问题自我剖析材料
2014/09/29 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
SQL Server中T-SQL标识符介绍与无排序生成序号的方法
2022/05/25 SQL Server