一步一步学习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中使用Oracle数据库(2)
Oct 09 PHP
APMServ使用说明
Oct 23 PHP
默默简单的写了一个模板引擎
Jan 02 PHP
phpMyadmin 用户权限中英对照
Apr 02 PHP
php中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
May 04 PHP
ThinkPHP实现二级循环读取的方法
Nov 03 PHP
phalcon框架使用指南
Feb 23 PHP
php微信开发之带参数二维码的使用
Aug 03 PHP
PHP基于ORM方式操作MySQL数据库实例
Jun 21 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
Apr 10 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
Oct 01 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
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
zf框架的Filter过滤器使用示例
2014/03/13 PHP
PHP写日志的实现方法
2014/11/05 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
innerHTML 和 getElementsByName 在IE下面的bug 的解决
2010/04/09 Javascript
基于datagrid框架的查询
2013/04/08 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
js将滚动条滚动到指定位置的简单实现方法
2016/06/25 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
教你5分钟学会用requirejs(必看篇)
2017/07/25 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
Javascript实现鼠标移入方向感知
2020/06/24 Javascript
vue 项目引入echarts 添加点击事件操作
2020/09/09 Javascript
JS中箭头函数与this的写法和理解
2021/01/14 Javascript
Python交换变量
2008/09/06 Python
Python lambda和Python def区别分析
2014/11/30 Python
Python实现简单多线程任务队列
2016/02/27 Python
浅谈python爬虫使用Selenium模拟浏览器行为
2018/02/23 Python
flask入门之文件上传与邮件发送示例
2018/07/18 Python
python3的输入方式及多组输入方法
2018/10/17 Python
pycharm远程开发项目的实现步骤
2019/01/20 Python
基于python历史天气采集的分析
2019/02/14 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
2020/04/08 Python
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
美国购车网站:TrueCar
2016/10/19 全球购物
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
《三峡》教学反思
2014/03/01 职场文书
质检员岗位职责
2015/02/03 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis
Android Rxjava3 使用场景详解
2022/04/07 Java/Android
python中 Flask Web 表单的使用方法
2022/05/20 Python
让JavaScript代码更加精简的方法技巧
2022/06/01 Javascript