一步一步学习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 相关文章推荐
ftp类(example.php)
Oct 09 PHP
实用函数10
Nov 08 PHP
PHP实现下载功能的代码
Sep 29 PHP
基于PHPExcel的常用方法总结
Jun 13 PHP
一个简单至极的PHP缓存类代码
Oct 23 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 PHP
PHP的Yii框架中过滤器相关的使用总结
Mar 29 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
Aug 04 PHP
Django 标签筛选的实现代码(一对多、多对多)
Sep 05 PHP
PHP bin2hex()函数基础实例讲解
Feb 11 PHP
PHP封装XML和JSON格式数据接口操作示例
Mar 06 PHP
通过代码实例解析PHP session工作原理
Dec 11 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入门教程 精简版
2009/12/13 PHP
PHP中的生成XML文件的4种方法分享
2012/10/06 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
2014/02/13 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
js兼容火狐获取图片宽和高的方法
2015/05/21 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
BootStrap glyphicons 字体图标实现方法
2016/05/01 Javascript
AngularJS基础 ng-model-options 指令简单示例
2016/08/02 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
flag和jq on 的绑定多个对象和方法(必看)
2017/02/27 Javascript
Javascript前端经典的面试题及答案
2017/03/14 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
JS中的变量作用域(console版)
2020/07/18 Javascript
vue使用exif获取图片经纬度的示例代码
2020/12/11 Vue.js
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
超简单的Python HTTP服务
2019/07/22 Python
Django Rest framework频率原理与限制
2019/07/26 Python
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
荷兰包包购物网站:The Little Green Bag
2018/03/17 全球购物
SIXPAD智能健身仪英国官网:革命性的训练装备品牌
2018/09/27 全球购物
研究生毕业鉴定
2014/01/29 职场文书
统计系教授推荐信
2014/02/28 职场文书
幼儿园教研活动总结
2014/04/30 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
学校党员对照检查材料
2014/08/28 职场文书
诚实守信演讲稿
2014/09/01 职场文书
群众路线党员自我评议范文2014
2014/09/24 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书
2015年圣诞节寄语
2015/08/17 职场文书
节约用水广告语60条
2019/11/14 职场文书
图神经网络GNN算法
2022/05/11 Python