php变量使用,php变量的使用

来源:www.cncfan.com | 2006-1-11 | (有1856人读过)

就像大部份的结构化程序,有所谓的全局变量与局部变量,PHP 在这方面也是有相似之处。

在 PHP 的程序执行时,系统会在内存中保留一块全局变量的区域。实际运用时,可以透过 $GLOBALS["变量名称"] 将需要的变量取出。在用户自定的函数或程序中,就可以用 $GLOBALS 数组取出需要的变量。当然别忘了 PHP 的变量是区分大小写的,搞错了大小写可是叫一百年,变量也不会出来。

$GLOBALS 数组是 PHP 程序中比较特殊的变量,不必定义,系统会自动匹配相关的变量在里面。在函数中,也不必管 $GLOBALS 数组是否已经做全局定义,就可以直接使用了。

和 $GLOBALS 变量类似的还有 $php_errormsg 字符串变量。若 PHP 的配置文件 (php.ini/php3.ini) 中的 track_errors 选项打开的话,会有全局变量 $php_errormsg 可以看到错误的信息。

在 PHP 中,全局变量的有效范围 (scope) 仅限于主要程序中,不会影响到函数中同名的变量,也就是全局变量与局部变量互不侵犯。若要变量能通透到函数中,就要用到 $GLOBALS 数组或是使用 global 定义。

例如,在自行开发的函数中,要取得目前执行 PHP 程序页面的文件名,就可以用 $GLOBALS["PHP_SELF"] 取出 $PHP_SELF 的值。

// 本程序使用 $GLOBALS 数组

function myfunc() {

echo $GLOBALS["PHP_SELF"];

}

myfunc();

?>

下面是错误的示范,请勿模仿,上面的才是正确的示范。

// 这是错误的示范

function errfunc() {

echo $PHP_SELF;

}

errfunc();

?>

但是这个错误的示范要是改成下例就没问题了

// 本程序使用全局定义

function myfunc() {

global $PHP_SELF;

echo $PHP_SELF;

}

myfunc();

?>

在变量前面加上 global 的名称,就是定义该变量为全局变量。用这种方式,就不需使用 $GLOBALS 数组,也能让变量进入自行开发的函数中。

接下来先看静态变量的例子

// 静态变量的例子

function myfunc() {

static $mystr;

$mystr.="哈";

echo $mystr."
\n";

}

myfunc(); // 哈

myfunc(); // 哈哈

myfunc(); // 哈哈哈

?>

函数在执行时所产生的变量,在函数结束时就消失了,有时因为程序的需要,函数在循环中,当不希望变量在每次执行完函数就消失的话,静态变量 (static variable) 就派上用场了。上例中,使用 $mystr 变量之前,先在变量前面加上 static,即表示变量 $mystr 是静态变量,当每次执行 myfunc() 函数时,$mystr 的值会一直增加,每执行一次就多一个哈字。若将 static 的静态变量定义拿掉,就没办法累加哈字了。

// 不是静态变量的例子 (错误的)

function myfunc() {

$mystr.="哈";

echo $mystr."
\n";

}

myfunc(); // 哈

myfunc(); // 哈

myfunc(); // 哈

?>

再看一个比较实际的例子,它是处理表格的颜色,让隔行的颜色不同。

function TdBackColor() {

static $ColorStr;

if ($ColorStr=="808080") {

$ColorStr="c0c0c0";

} else {

$ColorStr="808080";

}

return($ColorStr);

}

echo "

for ($i=0; $i<10; $i++) {

$ColorStr=TdBackColor();

echo "

这是第".$i."行\n";

}

echo "

";

?>

PHP 的变量使用技巧上,最令人觉得不可思议的则是变量的变量 (variable variable)。这是充分利用 PHP 特性玩出的特殊技巧

$a = "Hello";

$$a = "world";

echo "$a, $hello"; // Hello, world

echo "$a, {$a}"; // 也是 Hello, world

?>

mdean@kcnet.com 举出一个更绝的例子 (24-Apr-1999),他称为变量的函数 (variable function)

function myCallbackFunction()

{

print("Hello from callback");

}

function myFunction($callback)

{

$callback();

}

// call to myFunction passing callback

// function as parameter

myFunction("myCallbackFunction");

?>

至于用户在 FORM 中输入的资料,要怎么处理呢?要是在 PHP 的配置文件中,track_vars 设为 On 时,直接使用变量名字就好了。如下例,next.php 在执行时,系统会自动产生两个变量 $username 及 $sex,直接使用就好了,比起传统的 CGI 要自己解析,PHP 实在是太神奇了。

姓名:

性别:

由于 PHP 许多语法都是 C 语言的翻版,故 PHP 在使用变量时,随时都可以使用新的变量,只要在使用前将变量初始化就好了,不必像 Pascal 语言那样严谨,所有要使用的变量都要事先定义。这当然有好处与坏处:好处是使用方便、自由;坏处就是常常因这些自由而付出相当大的代价调试。在程序码短的 PHP 程序当然不成问题,当程序在数百数千行,甚至 include 或 require 好几层之后,问题就浮现出来了。无论如何,保持良好的写作习惯才是避免浪费青春的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php syncml 协议,基于改进的SyncML协议的图像安全同步技术研究

Image secure synchronization technology research based on improved SyncML protocolJIA Zhaolong1贾兆拢(1991-)&#xff0c;女&#xff0c;北京邮电大学硕士生&#xff0c;主要研究方向&#xff1a;网络安全技术与应用MA Zhaofeng2马兆丰(1974-)&#xff0c;男&#xff0c…

php 文字水印如何居中,php文字水印和php图片水印实现代码(二种加水印方法)

$dst_path dst.jpg;$src_path src.jpg;//创建图片的实例$dst imagecreatefromstring(file_get_contents($dst_path));$src imagecreatefromstring(file_get_contents($src_path));//获取水印图片的宽高list($src_w, $src_h) getimagesize($src_path);//将水印图片复制到目…

qq ip探测仪 php,巧用Win7资源监视器,查看QQ好友IP

用QQ时间比较长、喜欢DIY的朋友都知道&#xff0c;有一些第三方版本的QQ或者插件可以显示好友IP地址&#xff0c;但其实在Windows7中根本用不着第三方软件&#xff0c;在系统自带的资源监视器中&#xff0c;就能很方便的看到QQ好友的IP地址。首先&#xff0c;打开“任务管理器”…

oracle安装显示注册表,windows下oracle 11g r2 安装过程与卸载详细图解

Oracle 11g安装1.解压下载的包&#xff0c;然后进入包内&#xff0c;点击setup.exe开始安装 。2.出现如下&#xff1a;一般把那个小对勾取消&#xff0c;点击下一步进行&#xff0c;弹出下图这个后点‘是3.下图后&#xff0c;选择创建和配置数据库&#xff0c;点击下一步。4.下…

oracle+连接格式,oracle外连接符号(+)的用法

我们都知道&#xff0c;PL/SQL中实现外连接&#xff0c;除了可以用关键词OUTER JOIN外&#xff0c;还可以用Oracle的外连接符号()。对于这个外连接符号()&#xff0c;虽然看到书上说&#xff1a;使用()进行外连接时&#xff0c;where条件中&#xff0c;对于附表的字段都应带上(…

php一行多个商品,【后端开发】php一行展示多个商品怎么实现

php一行展示多个商品怎么实现php可以用来连接数据库查询商品&#xff0c;并输出展示给用户&#xff0c;但想要实现一行展示多个商品需要用到css技术&#xff0c;具体实现如下&#xff1a;1、首先php代码$sql "select * from user";$result $conn->query($sql);i…

linux设置时间快1小时,LINUX CentOS系统时间与现在时间相差8小时解决方法

GPS 系统中有两种时间区分&#xff0c;一为UTC&#xff0c;另一为LT(地方时)两者的区别为时区不同&#xff0c;UTC就是0时区的时间&#xff0c;地方时为本地时间&#xff0c;如北京为早上八点(东八区)&#xff0c;UTC时间就为零点&#xff0c;时间比北京时晚八小时&#xff0c;…

linux双网卡端口聚合,Linux双网卡聚合改造

Linux双网卡聚合改造一、环境和需求Linux主机只有一块网卡接到交换机上&#xff0c;为了消除交换机的单点&#xff0c;新增一台交换机&#xff0c;Linux主机端新接一块网卡到新交换机上&#xff0c;对这两块网卡做聚合达到目的。二、物理连线使用网线连接新增交换机和新网卡三、…

linux服务器无法识别xml文件,linux上重启服务器提示找不到smartbi-config.xml文件

(本文档仅供参考)问题服务器上重启服务时&#xff0c;报了如下错误信息&#xff1a;(备注&#xff1a;因安全考虑&#xff0c;新版本的config登录界面已经不展示config文件的加载路径了。)解决方案原因一&#xff1a;这是一个关于在哪个路径下启动smartbi服务的问题。首先&…

linux uname命令详解,linux中uname命令参数及用法详解

uname 命令可用于大多数 UNIX 和类 UNIX 系统以及 Linux。功能说明&#xff1a;uname用来获取电脑和操作系统的相关信息。语  法&#xff1a;uname [-amnrsvpio][--help][--version]补充说明&#xff1a;uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。参…

android linux网络连接,Android和Linux服务器之间的TCP连接

我正在编写一个代码&#xff0c;需要每秒从Android移动设备向台式计算机(linux服务器)发送数据。由于数据经常发送&#xff0c;通过Http命中无法实现(因为会消耗时间)&#xff0c;所以Tcp通信似乎是更好的选择&#xff0c;因为android手机的数据可以通过此套接字编程快速发送。…

linux堆上的内存可执行吗,pwn的艺术浅谈(二):linux堆相关

这是linux pwn系列的第二篇文章&#xff0c;前面一篇文章我们已经介绍了栈的基本结构和栈溢出的利用方式&#xff0c;堆漏洞的成因和利用方法与栈比起来更加复杂&#xff0c;为此&#xff0c;我们这篇文章以shellphish的how2heap为例&#xff0c;主要介绍linux堆的相关数据结构…

arm嵌入式linux应用实例开发pdf,零点起步——ARM嵌入式Linux应用开发入门一书的源代码...

代码片段和文件信息属性 大小 日期 时间 名称----------- --------- ---------- ----- ----文件 24064 2016-03-20 09:49 零点起步——ARM嵌入式Linux应用开发入门\习题答案 (1).doc文件 24064 2016-03-20 09:50 零点起步——ARM嵌入式Lin…

linux上p图工具,linux图片处理工具GraphicsMagick安装使用

安装依赖包&#xff1a;yum install libpng libjpeg freetype libpng-devel libjpeg-devel libtool-ltdl-devel libtool-ltdl官网下载GraphicsMagick包官网地址&#xff1a;http://www.graphicsmagick.org/解压编译安装&#xff1a;tar xf GraphicsMagick-1.3.25.tar.gz./confi…

manjaro linux下载软件,manjaro linux

manjaro linux下载。manjaro linux是基于Arch Linux开发的Linux操作系统&#xff01;对于裸服务器、虚拟机、IaaS 和 PaaS 方面都得到了加强&#xff0c;而且内置了强大的数据中心满足商业的各种要求&#xff0c;是强大的混合云平台和物理系统&#xff01;manjaro linux介绍man…

linux 安装qt 4.6软件,QT学习之一:Linux下安装QT之版本qt-4.6.3

在Linux中分别安装应用于不同平台的QT&#xff1a;PC&#xff1b;嵌入式X86&#xff1b;ARM。这三者PC版、嵌入式X86版和ARM版的区别主要体现在&#xff1a;当configure时分别加了不同的参数&#xff0c;具体区别是&#xff1a;PC平台&#xff1a;在linux中全安装qt&#xff0c…

linux kill命令使用方法,Linux初学者的killall命令(8个例子)

Linux初学者的killall命令(8个例子)我们已经讨论了kill命令 &#xff0c;如果你想在Linux中终止进程&#xff0c;你可以使用kill命令 。 但是&#xff0c;还有一个命令行实用程序可以用于相同的目的&#xff1a; killall 。 在本教程中&#xff0c;我们将使用一些易于理解的示例…

linux wait 信号丢失,wait函数族和SIGCHLD信号的关系

一、wait()和waitpid()函数的区别pid_t wait(int *status)进程一旦调用了wait&#xff0c;就立即阻塞自己&#xff0c;由wait自动分析是否当前进程的某个子进程已经退出&#xff0c;如果让它找到了这样一个已经变成僵尸的子进程&#xff0c; wait就会收集这个子进程的信息&…

linux socket接收不到16进制数据,C下通过socket收发十六进制数据解决办法

C下通过socket收发十六进制数据系统是在LINUX下&#xff0c;下位机发送十六进制数据过来 上位机怎么解析 把数据以十六进制的形式显示出来&#xff0c;发送十六进制又如何实现------解决方案--------------------socket不就是发16进制的么------解决方案--------------------那…

c语言 字符串 url,如何对URL字符串进行百分号编码

在和web服务进行交互时&#xff0c;我们经常需要对URL中的特定字符和传输的表单数据进行百分号编码。例如&#xff0c;’&’在百分号编码时会变成’%26’。搞清楚 URL中哪部分的哪些字符应该进行百分号编码了并不是件易事。最好的资料好像是RFC 3986和W3C HTML5。出于兴趣和…