一步一步学习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 截取字符串 分别适合GB2312和UTF8编码情况
Feb 12 PHP
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
Jun 11 PHP
在smarty模板中使用PHP函数的方法
Apr 23 PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
Nov 21 PHP
PHP设计模式之迭代器模式的深入解析
Jun 13 PHP
深入解析php中的foreach问题
Jun 30 PHP
thinkphp中session和cookie无效的解决方法
Dec 19 PHP
php自定义错误处理用法实例
Mar 20 PHP
PHP判断IP并转跳到相应城市分站的方法
Mar 25 PHP
php解析字符串里所有URL地址的方法
Apr 03 PHP
PHP读取CSV大文件导入数据库的实例
Jul 24 PHP
详解阿里云视频直播PHP-SDK接入教程
Jul 09 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字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
php 接口类与抽象类的实际作用
2009/11/26 PHP
php断点续传之如何分割合并文件
2014/03/22 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
php源码 fsockopen获取网页内容实例详解
2016/09/24 PHP
新浪中用来显示flash的函数
2007/04/02 Javascript
原创jQuery弹出层插件分享
2015/04/02 Javascript
CSS3实现动态背景登录框的代码
2015/07/28 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
2015/08/24 Javascript
JS动态给对象添加属性和值的实现方法
2016/10/21 Javascript
jQuery实现弹出窗口弹出div层的实例代码
2017/01/09 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
在node中如何使用 ES6
2017/04/22 Javascript
微信小程序 rich-text的使用方法
2017/08/04 Javascript
使用mint-ui开发项目的一些心得(分享)
2017/09/07 Javascript
vue做移动端适配最佳解决方案(亲测有效)
2018/09/04 Javascript
vue地址栏直接输入路由无效问题的解决
2018/11/15 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
2018/11/23 Javascript
Node.js 实现抢票小工具 &amp; 短信通知提醒功能
2019/10/22 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
python回调函数中使用多线程的方法
2017/12/25 Python
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
2018/04/17 Python
Python3.6实现连接mysql或mariadb的方法分析
2018/05/18 Python
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
2016/12/30 HTML / CSS
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
关于赌博的检讨书
2014/01/08 职场文书
应聘销售主管的求职信
2014/04/26 职场文书
保护环境倡议书100字
2014/05/19 职场文书
五四演讲稿范文
2014/09/03 职场文书
骨干教师事迹材料
2014/12/17 职场文书
党员年度个人总结
2015/02/14 职场文书
解放思想大讨论活动总结
2015/05/09 职场文书
Spring Boot两种全局配置和两种注解的操作方法
2021/06/29 Java/Android
警用民用对讲机找不同
2022/02/18 无线电