PHP -- 第三讲 变量
[b][size=5]一、PHP开发工具[/size][/b]这里介绍了一些 PHP IDE 工具,非常见的 Editplus 之类的,都是专门为 PHP 开发的,有兴趣都可以试试看,找出自己用得顺手的就可以了,呵呵,本人一年来都是用 Zend Studio 作为开发工具,因为调试和编写都很方便,代码检测功能和手册查阅功能我非常喜欢。 引用:[indent]Zend Studio
开发商: [url=http://www.zend.com/store/products/zend-studio.php][color=#0000ff]http://www.zend.com/store/products/zend-studio.php[/color][/url]
目前公认的最强大的PHP开发工具,这种集成软件包包括了用于编辑,调试,配置PHP程序所需要的客户及服务器组件,软件包具有工业标准的PHP开发环境,代码完成引擎,功能齐全的调试器等
NuSphere PHPEd
[url=http://www.nusphere.com/][color=#0000ff]http://www.nusphere.com/[/color][/url]
PhpED 通过无与伦比的PHP调试和压缩能力,以及一个新的NuSOAP web服务向导成为了PHP领域的领军产品。更加强大的Project Manager使得发布站点和应用程序比以前更加容易。现在可以在线程级别对正在运行或者开发中的程序进行测试和调校。支持 CVS 版本控制,而且,对PostgreSQL和MySQL数据库的本地支持为PHP使用开源数据库提供了一个广泛的环境。但对中文支持不太好,汉字都当作单字节处理了。PHPED还有Linux版本。
PHP Coder
[url=http://www.phpide.de/][color=#0000ff]http://www.phpide.de/[/color][/url]
PHPCoder用于快速开发和调试PHP应用程序,它很容易扩展和定制,完全能够符合开发者的个性要求.1:结合了PHP编译器和参考文档,可以对编辑中的PHP脚本进行即时预览2:支持高亮显示HTML和PHP代码;3:自动完成功能,可以自动完成用户自定义代码片断;4:标准函数提示;5:有专门的工程项目管理器;6:对象浏览器搜寻编辑中文件的包含信息,自定义函数,并以树形显示.7:支持查找对称的语句标记符;8:支持高级搜索和替换;9:自带FTP功能;10:支持运行和断点调试11:......总之,PHPCoder是一个非常实用的,功能强大的编程环境,而且它是免费的!
Ankord PHP Expert Editor
[url=http://www.ankord.com/phpxedit.html][color=#0000ff]http://www.ankord.com/phpxedit.html[/color][/url]
PHP Expert Editor是一个容易使用的 PHP 开发工具,它的功能照顾到初级者及专业开发人员。 PHP Expert Editor 内建 http server 用作测试及除错(你也可以使用其他 http server), PHP 语法检查, FTP 功能, 程式码样板等功能。
DzSoft PHP Editor
[url=http://www.dzsoft.com/dzphp.htm][color=#0000ff]http://www.dzsoft.com/dzphp.htm[/color][/url]
专为 PHP 所设计的网页程序编辑软件 - DzSoft PHP Editor,具有 PHP 编辑、侦错、浏览、原始码检视、档案浏览、可自订的原始码样本..等功能,无须架设网站主机就可以测试 PHP 指令码,是一套功能强大的 PHP 编程软件。
DzSoft PHP Editor和Ankord PHP Expert Editor非常相识,几乎找不到他们的主要区别,关于这两个软件之间的具体内幕我也不太清楚!
Dev-PHP IDE
[url=http://devphp.sourceforge.net/][color=#0000ff]http://devphp.sourceforge.net/[/color][/url]
非常好用的php编辑器,支持php-gtk,內建許多快速html表单,非常的好用,本身含繁体语言包,另附暗地论坛的中文语言包
Master PHP
[url=http://www.gsoftwares.com/][color=#0000ff]http://www.gsoftwares.com/[/color][/url]
一款支持PHP, PHP3, PHTML, CSS, JS, HTML, HTM and SQL的编辑器,它允许用户编辑多种一次编辑多种文件,允许插入,运行和最优化程序的脚本,用户可以通过工具栏定制按钮和窗体,可以导出html和rtf 格式,支持18种语言
Komodo
[url=http://www.activestate.com/Products/Komodo/][color=#0000ff]http://www.activestate.com/Products/Komodo/[/color][/url]
Komodo支持在Windows与Linux上,Perl、Python及JavaScript等的程序语言开发,以及多种程序语言语法不同颜色标注。这款功能强大的IDE竟然不支持中文,连中文文件名的文件都打不开!
Maguma Studio
[url=http://www.maguma.com/][color=#0000ff]http://www.maguma.com/[/color][/url]
Maguma Studio包含了编辑和调试 PHP 程序所有必须的工具。无论您是经验丰富的开发者、或是初学者它都适合您。带有十分完整的断点、分步等调试功能。支持以树形方式显示文件中的函数和类成员。
PhpLens
[url=http://phplens.com/][color=#0000ff]http://phplens.com[/color][/url]
PhpLens是一款专为PHP开发人员准备的快速数据库开发程序。通过使用PhpLens,可以快速的设计、发布和维护数据库驱动的网络产品。它允许你以HTML表格的形式对数据库进行浏览、编辑、创建、删除和查找。不用写任何代码,它就允许你完成上述操作。
UESTUDIO[/indent]
[b][size=5]二、编写第一个PHP程序[/size][/b] [size=3]
[align=center][b][size=3][color=navy][/color][/size][/b][/align][size=3] 下面教大家编写你的第一个PHP程序:[/size] 引用:[indent]
[b][size=3][color=blue]1。编写代码[/color][/size][/b] [size=3] [/size]
[size=3] 启动PHP代码编写工具UltraEdit,在编辑区域写下如下代码(不包括行号):[/size]
[size=3]复制内容到剪贴板 代码:这是我的第一个PHP程序 <HTML> <HEAD> <TITLE>我的第一个PHP程序</TITLE> </HEAD> <BODY> <H3>这是我的第一个PHP程序</H3> <?php phpinfo(); ?> </BODY> </HTML>
[/size]
[size=3][b][size=3][color=blue]2。保存代码[/color][/size][/b] [/size]
[size=3]结束后为文件取名 test.php ,保存到 D:\usr\www\html 目录下(如果你在第二课中改变安装目录,这里就要作相应改变)。[/size]
[size=3][size=3][color=blue][b]3。运行程序[/b][/color][/size] [size=3] [/size][/size]
[size=3][size=3] 启动浏览器,在地址栏输入 [url=http://localhost/test.php][color=#006699]http://localhost/test.php[/color][/url] 回车。你看到了什么?程序运行成功了吗?高兴吧。PHP就是这么简单![/size][/size]
[size=3][/size]
[size=3][size=3][color=blue][b]4。对程序的解释[/b][/color][/size] [size=3][/size][size=3] [/size][/size]
[size=3][size=3][color=blue] (A)代码[/color]:这是一段PHP与HTML的混合代码,确切的说是在HTML代码中嵌入PHP代码。其中的PHP代码,会交给PHP解析器处理后输出,HTML代码不会被处理,直接输出。[/size] [size=3][/size][size=3]
[/size][/size]
[size=3][size=3] 在HTML中嵌入PHP代码的方法有几种,我们一般用这种方法来标识PHP代码。所以我们凡是要交给PHP处理的部分就用这个方法标明。在上面的代码中,你能说出哪部分是要交给PHP解析器处理的吗?哪些又是普通的HTML代码直接输出呢?[/size] [size=3][/size][size=3]
[/size][/size]
[size=3][size=3] 是的,上面的代码中 phpinfo() 是PHP代码,要交给PHP解析器处理。那 phpinfo() 是什么意思呢?这是PHP里的一个函数,它的功能就是显示PHP运行的环境信息。在PHP里有几千个这样的函数,能实现各种各样的功能,包括字符处理,时间,数学,绘图,文件操作,数据库操作…等等。你只要会用这些函数就能实现强大的网站功能。[/size] [size=3][/size][size=3]
[/size][/size]
[size=3][size=3] 注意到了吗?phpinfo()后面还有一个分号“;”。[b][color=darkred]特别强调:[/color][color=blue]每个PHP语句后都要用这个分号“;”表示该语句的结束。[/color][/b][/size] [size=3][/size][size=3] [/size][/size]
[size=3][size=3] [/size][/size]
[size=3][size=3][color=blue] (B)保存[/color]:文件的扩展名一定要是php,比如这里的 test.php。因为这种扩展名的文件,WEB服务器才会交给PHP解析器处理,否则WEB服务器会当作普通网页文件不作任何处理就直接输出了。
[/size][size=3][/size][size=3] [/size][/size]
[size=3][size=3] 文件一定要保存到 D:\usr\www\html 目录之下。[/size][/size][size=3][size=3]这是我们安装WEB 服务器时指定的网站目录,只有这个目录下的文件才允许访问,放到其它地方是无法通过浏览器访问到的。[/size] [size=3][/size][size=3] [/size][/size]
[size=3][size=3][color=blue] (C)运行[/color]:[url=http://localhost/][color=#006699]http://localhost/[/color][/url] 代表本机地址,也可以用 [url=http://127.0.0.1/][color=#006699]http://127.0.0.1/[/color][/url] ,所以我们在网站目录下存放的文件test.php就要在浏览器地址栏输入[url=http://localhost/test.php][color=#006699]http://localhost/test.php[/color][/url] 才能访问浏览。[/size] [size=3][/size][size=3]
[/size][/size]
[size=3][size=3] 你也可以在网站根目录下建立一个新的文件夹 mySite,即 D:\usr\www\html\mySite\,其中保存一个文件test.php,那么要访问这个文件就要在浏览器中输入:[url=http://localhost/mySte/test.php][color=#006699]http://localhost/mySte/test.php[/color][/url][/size] [/size][/indent]
[/size]
[[i] 本帖最后由 wl1011 于 2008-4-19 09:40 编辑 [/i]] [size=3][b][size=5][color=black]三、PHP变量[/color][/size][/b]
[b][size=5][/size][/b][b][size=4]1、基础[/size][/b]
[size=5][size=3]PHP 中一个美元符号后面跟上一个变量名称,即表示一个变量。变量的名称是对大小写敏感的。
[/size][/size]
变量名与 PHP 中其它的标签一样遵循相同的规则。一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。按照正常的正则表达式,它将被表述为:'[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
[b]注: [/b]在此所说的字母是 a-z,A-Z,以及 ASCII 字符从 127 到 255(0x7f-0xff)。 复制内容到剪贴板 代码:<?php
$var = 'Bob';
$Var = 'Joe';
echo "$var, $Var"; // 输出 "Bob, Joe"
$4site = 'not yet'; // 非法变更名;以数字开头
$_4site = 'not yet'; // 合法变量名;以下划线开头
$i站点is = 'mansikka'; // 合法变量名;可以用中文
?>
PHP 4 提供了另外一种方式给变量赋值:[url=http://www.php.net/manual/zh/language.references.php][color=#0000ff]引用赋值[/color][/url]。这意味着新的变量简单的引用(换言之,“成为其别名” 或者 “指向”)了原始变量。改动新的变量将影响到原始变量,反之亦然。
使用引用赋值,简单地将一个 & 符号加到将要赋值的变量前(源变量)。例如,下列代码片断将输出“My name is Bob”两次: 复制内容到剪贴板 代码:<?php
$foo = 'Bob'; // Assign the value 'Bob' to $foo
$bar = &$foo; // Reference $foo via $bar.
$bar = "My name is $bar"; // Alter $bar...
echo $bar;
echo $foo; // $foo is altered too.
?>
有一点重要事项必须指出,那就是只有有名字的变量才可以引用赋值。 复制内容到剪贴板 代码:<?php
$foo = 25;
$bar = &$foo; // This is a valid assignment.
$bar = &(24 * 7); // Invalid; references an unnamed expression.
function test()
{
return 25;
}
$bar = &test(); // Invalid.
?>
虽然在 PHP 中并不需要初始化变量,但这是个好习惯。未初始化的变量具有其类型的默认值 - [b]FALSE[/b],零,空字符串或者空数组。 复制内容到剪贴板 代码:
<?php
echo ($unset_bool ? "true" : "false"); // false
$unset_int += 25; // 0 + 25 => 25
echo $unset_string . "abc"; // "" . "abc" => "abc"
$unset_array[3] = "def"; // array() + array(3 => "def") => array(3 => "def")
?>
依赖未初始化变量的默认值在某些情况下会有问题,例如把一个文件包含到另一个之中时碰上相同的变量名。另外把 [url=http://www.php.net/manual/zh/ini.core.php#ini.register-globals][color=#0000ff]register_globals[/color][/url] 打开是一个主要的[url=http://www.php.net/manual/zh/security.globals.php][color=#0000ff]安全隐患[/color][/url]。[url=http://www.php.net/manual/zh/missing-stuff.php#e-notice][color=#0000ff]E_NOTICE[/color][/url] 级别的错误会在碰上未初始化的变量时发出,但是在向一个未初始化的数组附加单元时不会。[url=http://www.php.net/manual/zh/function.isset.php][color=#0000ff]isset()[/color][/url] 语言结构可以用来检测一个变量是否已被初始化。
对于初学者来说,以下几点需要大家牢记的[b][color=red]黄金法则[/color][/b]: 复制内容到剪贴板 代码:
1. 变量必须初始化,变量初始化的位置建议放在离在第一次使用此变量最近的地方。这样可以避免很多安全隐患。
2. 变量的命名要有规则,多个单词的变量有两种命名方法。第一,$var_name。第二,$varName;
3. 变量最好使用英文,且要能准确表达它代表的意义。例如:用户名:$user_name,登录:$login
[/size][size=4][/size]
[size=4][/size] 更多例子,请阅读:[url=http://www.cnphpers.com/thread-295-1-1.html][color=#006699]http://www.cnphpers.com/thread-295-1-1.html[/color][/url] [url=http://www.php.net/manual/zh/language.variables.php][color=#006699]http://www.php.net/manual/zh/language.variables.php[/color][/url]
[size=4][b]2、预定义变量[/b][/size]
[color=black]PHP 提供了大量的预定义变量。由于许多变量依赖于运行的服务器的版本和设置,及其它因素,所以并没有详细的说明文档。一些预定义变量在 PHP 以命令行形式运[/color]行时并不生效。有关这些变量的详细列表。 复制内容到剪贴板 代码:Warning
PHP 4.2.0 以及后续版本中,PHP 指令 register_globals 的默认值为 off。这是 PHP 的一个主要变化。让 register_globals 的值为 off 将影响到预定义变量集在全局范围内的有效性。例如,为了得到 DOCUMENT_ROOT 的值,将必须使用 $_SERVER['DOCUMENT_ROOT'] 代替 $DOCUMENT_ROOT,又如,使用 $_GET['id'] 来代替 $id 从 URL [url]http://www.example.com/test.php?id=3[/url] 中获取 id 值,亦或使用 $_ENV['HOME'] 来代替 $HOME 获取环境变量 HOME 的值。
更多相关信息,请阅读 register_globals 的配置项条目,安全一章中的使用 Register Globals,以及 PHP » 4.1.0 和 » 4.2.0 的发行通告。
如果有可用的 PHP 预定义变量那最好用,如超全局变量。
从 PHP 4.1.0 开始,PHP 提供了一套附加的预定数组,这些数组变量包含了来自 web 服务器(如果可用),运行环境,和用户输入的数据。这些数组非常特别,它们在全局范围内自动生效,例如,在任何范围内自动生效。因此通常被称为自动全局变量(autoglobals)或者超全局变量(superglobals)。(PHP 中没有用户自定义超全局变量的机制。)超全局变量罗列于下文中;但是为了得到它们的内容和关于 PHP 预定义变量的进一步的讨论以及它们的本质,请参阅[color=#800080]预定义变量[/color]。而且,你也将注意到旧的预定义数组($HTTP_*_VARS)仍旧存在。自 PHP 5.0.0 起,长格式的 [color=black]PHP 预定义变量[/color]可以通过设置 [color=#0000ff]register_long_arrays[/color] 来屏蔽。
[b]Note[/b]: [b]可变变量[/b] 超级全局变[color=black]量不能被用作可变变量。[/color]
[b]Note[/b]: 尽管超全局变量和 HTTP_*_VARS 同时存在。但是他们并不是同一个变量,所以改变一个的值并不会对另一个产生影响。 [color=black]如果某些 variables_order 中的变量没有设定,它们的对应的 PHP 预定义数组也是空的。[/color]
[b]PHP 超全局变量[/b] 复制内容到剪贴板 代码:
$GLOBALS
包含一个引用指向每个当前脚本的全局范围内有效的变量。该数组的键名为全局变量的名称。从 PHP 3 开始存在 $GLOBALS 数组。
$_SERVER
变量由 web 服务器设定或者直接与当前脚本的执行环境相关联。类似于旧数组$HTTP_SERVER_VARS数组(依然有效,但反对使用)。
$_GET 经由
URL 请求提交至脚本的变量。类似于旧数组 $HTTP_GET_VARS 数组(依然有效,但反对使用)。
$_POST
经由 HTTP POST 方法提交至脚本的变量。类似于旧数组 $HTTP_POST_VARS 数组(依然有效,但反对使用)。
$_COOKIE
经由 HTTP Cookies 方法提交至脚本的变量。类似于旧数组 $HTTP_COOKIE_VARS 数组(依然有效,但反对使用)。
$_FILES
经由 HTTP POST 文件上传而提交至脚本的变量。类似于旧数组 $HTTP_POST_FILES 数组(依然有效,但反对使用)。
$_ENV
执行环境提交至脚本的变量。类似于旧数组 $HTTP_ENV_VARS 数组(依然有效,但反对使用)。
$_REQUEST
经由 GET,POST 和 COOKIE 机制提交至脚本的变量,因此该数组并不值得信任。所有包含在该数组中的变量的存在与否以及变量的顺序均按照 php.ini 中的 variables_order 配置指示来定义。
$_SESSION
当前注册给脚本会话的变量。类似于旧数组 $HTTP_SESSION_VARS 数组(依然有效,但反对使用)。
有关预定义变量详细解释,请阅读 [url=http://www.php.net/manual/zh/reserved.variables.php#reserved.variables.globals][color=#006699]http://www.php.net/manual/zh/res ... d.variables.globals[/color][/url] [b][size=4]3、可变变量[/size][/b]
[size=4]有时候使用可变变量名是很方便的。就是说,一个变量的变量名可以动态的设置和使用。一个普通的变量通过声明来设置,例如: [/size]复制内容到剪贴板 代码:<?php
$a = 'hello';
?>
[b][size=4][/size][/b]
[size=3]一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。在上面的例子中 [i]hello[/i] 使用了两个美元符号($)以后,就可以作为一个可变变量的变量了。例如: [/size]
[size=3]复制内容到剪贴板 代码:
<?php
$$a = 'world';
?>
[/size]
[size=3][/size][size=3]这时,两个变量都被定义了:$a 的内容是“hello”并且 $hello 的内容是“world”。因此,可以表述为: [/size]
[size=3]复制内容到剪贴板 代码:<?php
echo "$a ${$a}";
?>
[/size]
[size=3] 以下写法更准确并且会输出同样的结果:[/size]
[size=3]复制内容到剪贴板 代码:<?php
echo "$a $hello";
?>
[/size]
[size=3][/size]它们都会输出:hello world。 要将可变变量用于数组,必须解决一个模棱两可的问题。这就是当写下 $$a[1] 时,解析器需要知道是想要 $a[1] 作为一个变量呢,还是想要 $$a 作为一个变量并取出该变量中索引为 [1] 的值。解决此问题的语法是,对第一种情况用 ${$a[1]},对第二种情况用 ${$a}[1]。
[size=3][/size][size=3][b] 注意,在 PHP 的函数和类的方法中,[/b][url=http://www.php.net/manual/zh/language.variables.predefined.php#language.variables.superglobals][color=#800080][b]超全局变量[/b][/color][/url][b]不能用作可变变量。
[/b][b][size=4]4、来自 PHP 之外的变量[/size][/b] [b][size=4][/size][/b][b]HTML 表单(GET 和 POST)[/b] [/size]
[size=3] 当一个表单体交给 PHP 脚本时,表单中的信息会自动在脚本中可用。有很多方法访问此信息,例如:[/size]
[size=3]复制内容到剪贴板 代码:
<form action="foo.php" method="OST">
Name: <input type="text" name="username"><br />
Email: <input type="text" name="email"><br />
<input type="submit" name="submit" value="Submit me!" />
</form>
[/size]
[size=3][/size]
[size=3] 根据特定的设置和个人的喜好,有很多种方法访问 HTML 表单中的数据。例如:[/size]
[size=3]复制内容到剪贴板 代码:<?php
// 自 PHP 4.1.0 起可用
echo $_POST['username'];
echo $_REQUEST['username'];
import_request_variables('p', 'p_');
echo $p_username;
// 自 PHP 3 起可用。自 PHP 5.0.0 起,这些较长的预定义变量
// 可用 register_long_arrays 指令关闭。
echo $HTTP_POST_VARS['username'];
// 如果 PHP 指令 register_globals = on 时可用。不过自
// PHP 4.2.0 起默认值为 register_globals = off。
// 不提倡使用/依赖此种方法。
echo $username;
?>
[/size]
[size=3]
使用 GET 表单也类似,只不过要用适当的 GET 预定义变量。GET 也适用于 QUERY_STRING(URL 中在“?”之后的信息)。因此,举例说,[i]http://www.example.com/test.php?id=3[/i] 包含有可用 $_GET['id'] 访问的 GET 数据。[/size]
[size=3][/size]
[size=3] 如上所示,在 PHP 4.2.0 之前 [color=#800080]register_globals[/color] 的默认值是 [i]on[/i]。在 PHP 3 中其值总是 on。PHP 社区鼓励大家不要依赖此指令,建议在编码时假定其为 [i]off[/i]。[/size]
[size=3]复制内容到剪贴板 代码:Note: magic_quotes_gpc 配置指令影响到 Get,Post 和 Cookie 的值。如果打开,值 (It's "HP!") 会自动转换成 (It\'s \"HP!\")。数据库的插入就需要转义。参见 addslashes(),stripslashes() 和 magic_quotes_sybase。
[/size]
[size=3] [b][size=4][/size][/b] PHP 也懂得表单变量上下文中的数组。例如可以将相关的变量编成组,或者用此特性从多选输入框中取得值。例如,将一个表单 POST 给自己并在提交时显示数据:[/size]
[size=3][/size]
[size=3]复制内容到剪贴板 代码:
<?php
if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
echo '<pre>';
print_r($_POST);
echo '<a href="'. $_SERVER['PHP_SELF'] .'">lease try again</a>';
echo '</pre>';
} else {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Name: <input type="text" name="personal[name]"><br />
Email: <input type="text" name="personal[email]"><br />
Beer: <br>
<select multiple name="beer[]">
<option value="warthog">Warthog</option>
<option value="guinness">Guinness</option>
<option value="stuttgarter">Stuttgarter Schwabenbr</option>
</select><br />
<input type="hidden" name="action" value="submitted" />
<input type="submit" name="submit" value="submit me!" />
</form>
<?php
}
?>
[/size]
[size=3][/size]
[size=3] IMAGE SUBMIT 变量名当提交表单时,可以用一幅图像代替标准的提交按钮,用类似这样的标记:[/size]
[size=3]复制内容到剪贴板 代码:<input type="image" src="image.gif" name="sub" />
[/size]
[size=3]当用户点击到图像中的某处时,相应的表单会被传送到服务器,并加上两个变量 sub_x 和 sub_y。它们包含了用户点击图像的坐标。有经验的用户可能会注意到被浏览器发送的实际变量名包含的是一个点而不是下划线(即 sub.x 和 sub.y),但 PHP 自动将点转换成了下划线。 [/size]
[size=3]
HTTP Cookies PHP 透明地支持 [color=#0000ff]» Netscape 规范[/color]定义中的 HTTP cookies。Cookies 是一种在远端浏览器端存储数据并能追踪或识别再次访问的用户的机制。可以用 [color=#0000ff]setcookie()[/color] 函数设定 cookies。Cookies 是 HTTP 信息头中的一部分,因此 SetCookie 函数必须在向浏览器发送任何输出之前调用。对于 [color=#0000ff]header()[/color] 函数也有同样的限制。Cookie 数据会在相应的 cookie 数据数组中可用,例如 $_COOKIE,$HTTP_COOKIE_VARS 和 $_REQUEST。更多细节和例子见 [color=#0000ff]setcookie()[/color] 手册页面。 如果要将多个值赋给一个 cookie 变量,必须将其赋成数组。例如:
[/size][size=3]复制内容到剪贴板 代码:<?php
setcookie("MyCookie[foo]", 'Testing 1', time()+3600);
setcookie("MyCookie[bar]", 'Testing 2', time()+3600);
?>
[/size]
[size=3][/size][size=3]这将会建立两个单独的 cookie,尽管 MyCookie 在脚本中是一个单一的数组。如果想在仅仅一个 cookie 中设定多个值,考虑先在值上使用 [color=#0000ff]serialize()[/color] 或 [color=#0000ff]explode()[/color]。注意在浏览器中一个 cookie 会替换掉上一个同名的 cookie,除非路径或者域不同。因此对于购物车程序可以保留一个计数器并一起传递,例如:[/size]
[size=3]复制内容到剪贴板 代码:<?php
if (isset($_COOKIE['count'])) {
$count = $_COOKIE['count'] + 1;
} else {
$count = 1;
}
setcookie('count', $count, time()+3600);
setcookie("Cart[$count]", $item, time()+3600);
?>
变量名中的点通常,PHP 不会改变传递给脚本中的变量名。然而应该注意到点(句号)不是 PHP 变量名中的合法字符。至于原因,看看:
[color=#000000][color=#0000bb]<?php
$varname[/color][color=#007700].[/color][color=#0000bb]ext[/color][color=#007700]; [/color][color=#ff8000]/* 非法变量名 */
[/color][color=#0000bb]?>[/color]
[/color]这时,解析器看到是一个名为 $varname 的变量,后面跟着一个字符串连接运算符,后面跟着一个裸字符串(即没有加引号的字符串,且不匹配任何已知的健名或保留字)'ext'。很明显这不是想要的结果。
出于此原因,要注意 PHP 将会自动将变量名中的点替换成下划线。 确定变量类型因为 PHP 会判断变量类型并在需要时进行转换(通常情况下),因此在某一时刻给定的变量是何种类型并不明显。PHP 包括几个函数可以判断变量的类型,例如:[color=#0000ff]gettype()[/color],[color=#0000ff]is_array()[/color],[color=#0000ff]is_float()[/color],[color=#0000ff]is_int()[/color],[color=#0000ff]is_object()[/color] 和 [color=#0000ff]is_string()[/color]。 [b][size=4]
[/size][/b][/size] [b][size=4]5、常量[/size][/b][size=3]
常量是一个简单值的标识符(名字)。如同其名称所暗示的,在脚本执行期间该值不能改变(除了所谓的[/size][url=http://www.php.net/manual/zh/language.constants.predefined.php][size=3][color=#800080]魔术常量[/color][/size][/url][size=3],它们其实不是常量)。常量默认为大小写敏感。按照惯例常量标识符总是大写的。
常量名和其它任何 PHP 标签遵循同样的命名规则。合法的常量名以字母或下划线开始,后面跟着任何字母,数字或下划线。用正则表达式是这样表达的:[/size][i][size=3][a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
[/size][/i]复制内容到剪贴板 代码:
<?php
// 合法的常量名
define("FOO", "something");
define("FOO2", "something else");
define("FOO_BAR", "something more");
// 非法的常量名
define("2FOO", "something");
// This is valid, but should be avoided:
// PHP may one day provide a magical constant
// that will break your script
define("__FOO__", "something");
?>
[b]Note[/b]: 在这里,字母是 a-z,A-Z,以及从 127 到 255(0x7f-0xff)的 ASCII 字符。 语法可以用 [color=#0000ff]define()[/color] 函数来定义常量。一个常量一旦被定义,就不能再改变或者取消定义。 常量只能包含标量数据([color=#0000ff]boolean[/color],[color=#0000ff]integer[/color],[color=#0000ff]float[/color] 和 [color=#0000ff]string[/color])。 不要定义 [color=#0000ff]resource[/color] 常量。 可以简单的通过指定其名字来取得常量的值,[i]不要[/i]在常量前面加上 [i]$[/i] 符号。如果常量名是动态的,也可以用函数 [color=#0000ff]constant()[/color] 来读取常量的值。用 [color=#0000ff]get_defined_constants()[/color] 可以获得所有已定义的常量列表。
[b]
Note[/b]: 常量和(全局)变量在不同的名字空间中。这意味着例如 [b]TRUE[/b] 和 $TRUE 是不同的。
如果使用了一个未定义的常量,PHP 假定想要的是该常量本身的名字,如同用字符串调用它一样(CONSTANT 对应 "CONSTANT")。此时将发出一个 [color=#0000ff]E_NOTICE[/color] 级的错误。参见手册中为什么 [color=#0000ff]$foo[bar][/color] 是错误的(除非事先用 [color=#0000ff]define()[/color] 将 [i]bar[/i] 定义为一个常量)。如果只想检查是否定义了某常量,用 [color=#0000ff]defined()[/color] 函数。常量和变量不同:
[list] 1、常量前面没有美元符号([i]$[/i]); [/list][list] 2、常量只能用 [color=#0000ff]define()[/color] 函数定义,而不能通过赋值语句; [/list][list] 3、常量可以不用理会变量范围的规则而在任何地方定义和访问; [/list][list] 4、常量一旦定义就不能被重新定义或者取消定义; [/list] 5、常量的值只能是标量。 复制内容到剪贴板 代码:<?php define("CONSTANT", "Hello world."); echo CONSTANT; // outputs "Hello world." echo Constant; // outputs "Constant" and issues a notice. ?>
[size=4][b]6、魔术常量[/b][/size]
[b][size=4][size=3][/size][/size][/b]PHP 向它运行的任何脚本提供了大量的[url=http://www.php.net/manual/zh/reserved.constants.php][color=#0000ff]预定义常量[/color][/url]。不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。 有五个魔术常量根据它们使用的位置而改变。例如 [b]__LINE__[/b] 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写,如下:
[font=Courier New][b]__LINE__ : [/b]文件中的当前行号。[/font]
[b][size=4][/size][/b]
[font=Courier New][b]__FILE__ : [/b]文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,[b]__FILE__[/b] 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。[/font]
[font=Courier New][/font]
[font=Courier New][b]__FUNCTION__ : [/b]函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。 [/font]
[font=Courier New][/font]
[font=Courier New][b]__CLASS__ : [/b]类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。 [/font]
[font=Courier New][/font]
[font=Courier New][b]__METHOD__ : [/b]类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。 [/font]
[b][size=4]
参见 [color=#0000ff]get_class()[/color],[color=#0000ff]get_object_vars()[/color],[color=#0000ff]file_exists()[/color] 和[color=#0000ff]function_exists()[/color]。 [/size][/b] 很好,很强大。。。
页:
[1]