一步一步学习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模块部分功能的简单封装
Sep 30 PHP
PHP中source #N问题的解决方法
Jan 27 PHP
PHP获取数组中重复最多的元素的实现方法
Nov 11 PHP
php实现高效获取图片尺寸的方法
Dec 12 PHP
PHP程序员必须清楚的问题汇总
Dec 18 PHP
windows7下php开发环境搭建图文教程
Jan 06 PHP
PHP中PDO的事务处理分析
Apr 07 PHP
PHP第三方登录―QQ登录实现方法
Feb 06 PHP
ThinkPHP中create()方法自动验证实例
Apr 26 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
Sep 29 PHP
PHP实现与java 通信的插件使用教程
Aug 11 PHP
Laravel框架实现即点即改功能的方法分析
Oct 31 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
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
2012/10/24 PHP
php笔记之:php数组相关函数的使用
2013/04/26 PHP
php 问卷调查结果统计
2015/10/08 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
parseInt parseFloat js字符串转换数字
2010/08/01 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
2014/06/03 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
jquery超简单实现手风琴效果的方法
2015/06/05 Javascript
javascript中的作用域和闭包详解
2016/01/13 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
2016/01/28 Javascript
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
bootstrap配合Masonry插件实现瀑布式布局
2017/01/18 Javascript
jQuery实现的背景颜色渐变动画效果示例
2017/03/24 jQuery
vue bootstrap小例子一枚
2017/06/09 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
python在命令行下使用google翻译(带语音)
2014/01/16 Python
在Lighttpd服务器中运行Django应用的方法
2015/07/22 Python
Python命令行解析模块详解
2018/02/01 Python
Python实现简单石头剪刀布游戏
2021/01/20 Python
django如何自己创建一个中间件
2019/07/24 Python
ZWILLING双立人英国网上商店:德国刀具锅具厨具品牌
2018/05/15 全球购物
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
办理退休介绍信
2014/01/09 职场文书
项目施工员岗位职责
2014/03/09 职场文书
基层干部2014全国两会学习心得体会
2014/03/10 职场文书
父亲节寄语大全
2015/02/27 职场文书
2015教师年度工作总结范文
2015/04/07 职场文书
有关三国演义的读书笔记
2015/06/25 职场文书
教师学习中国梦心得体会
2016/01/05 职场文书
Redis数据结构之链表与字典的使用
2021/05/11 Redis
Vue的过滤器你真了解吗
2022/02/24 Vue.js