一步一步学习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
PHP 字符截取 解决中文的截取问题,不用mb系列
Sep 29 PHP
php的字符串用法小结
Jun 08 PHP
PHP与MYSQL中UTF8 中文排序示例代码
Oct 23 PHP
PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能
Apr 27 PHP
PHP入门教程之面向对象基本概念实例分析
Sep 11 PHP
PhpStorm terminal无法输入命令的解决方法
Oct 09 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
Oct 29 PHP
PHP正则表达式匹配替换与分割功能实例浅析
Feb 04 PHP
PHP无限极分类函数的实现方法详解
Apr 15 PHP
php语言注释,单行注释和多行注释
Jan 21 PHP
JS操作XML中DTD介绍及使用方法分析
Jul 04 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开发框架总结收藏
2008/04/24 PHP
php 数据库字段复用的基本原理与示例
2011/07/22 PHP
php中实现记住密码下次自动登录的例子
2014/11/06 PHP
PDO防注入原理分析以及注意事项
2015/02/25 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
2020/03/18 PHP
jquery 最简单易用的表单验证插件
2010/02/27 Javascript
基于IE下ul li 互相嵌套时的bug,排查,解决过程以及心得介绍
2013/05/07 Javascript
javascript中自定义对象的属性方法分享
2013/07/12 Javascript
js取消单选按钮选中并判断对象是否为空
2013/11/14 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
2014/03/27 Javascript
node.js中的console.error方法使用说明
2014/12/10 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
jQuery动态星级评分效果实现方法
2015/08/06 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
js 函数式编程学习笔记
2017/03/25 Javascript
JS实现按钮添加背景音乐示例代码
2017/10/17 Javascript
详解layui中的树形关于取值传值问题
2018/01/16 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
JavaScript中var、let、const区别浅析
2018/06/24 Javascript
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
[01:46]2018完美盛典章节片——坚守
2018/12/17 DOTA
python 匹配url中是否存在IP地址的方法
2018/06/04 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
2019/01/05 Python
Python定义函数功能与用法实例详解
2019/04/08 Python
六十大寿答谢词
2014/01/12 职场文书
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
机械加工与数控专业自荐书
2014/06/04 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
导游词之上海东方明珠塔
2019/09/25 职场文书
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android