PHP主要的数据类型有5种:integer,double,string,array,object。
php变量的声明:
PHP 中的变量用一个美元符号后面跟变量名来表示。变量名是区分大小写的。例如:
<?php
$var='Jim';
$VAR='Kimi;
echo "$var,$VAR"; //输出“Jim,Kimi"
?>
php变量的赋值:
<?php
$foo = 'Bob'; // 赋值'Bob'给foo
$bar = &$foo; // 通过$bar引用,注意&符号
$bar = "My name is $bar"; // 修改 $bar
echo $bar;
echo $foo; // $foo 也修改了,类似C++
?>
PHP预定义变量:
PHP 提供了大量的预定义变量。由于许多这些变量依赖于运行的服务器的版本和设置,及其它因素,所以并没有详细的说明文档。一些预定义变量在 PHP 以命令行形式运行时并不生效。
在PHP 4.2.0 以及后续版本中,PHP 指令 register_globals 的默认值为 off。这是 PHP 的一个主要变化。让 register_globals 的值为 off 将影响到预定义变量集在全局范围内的有效性。例如:
为了得到 DOCUMENT_ROOT 的值,必须使用 $_SERVER['DOCUMENT_ROOT'] 代替 $DOCUMENT_ROOT。
为了从 URL “http://www.example.com/test.php?id=3” 中获取 id 值,必须使用 $_GET['id'] 来代替 $id 。
还有用 $_ENV['HOME'] 来代替 $HOME 获取环境变量 HOME 的值。
自动全局变量:
从 PHP 4.1.0 开始,PHP 提供了一套附加的预定数组,这些数组变量包含了来自 web 服务器(如果可用),运行环境,和用户输入的数据。这些数组非常特别,它们在全局范围内自动生效,在任何范围内自动生效。因此通常被称为自动全局变量(autoglobals)或者超全局变量(superglobals)。(PHP 中没有用户自定义超全局变量的机制)超全局变量罗列于下文中;而且,你也将注意到旧的预定义数组($HTTP_*_VARS)仍旧存在。自 PHP 5.0.0 起,长格式的 PHP 预定义变量可以通过设置 register_long_arrays 来屏蔽。下表是php的超全局变量:
超全局变量 | 描述 |
---|---|
$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 配置指示来定义。此数组在 PHP 4.1.0 之前没有直接对应的版本。参见 import_request_variables()。 |
$_SESSION | 当前注册给脚本会话的变量。类似于旧数组 $HTTP_SESSION_VARS 数组(依然有效,但反对使用) |
变量的应用范围:
函数内调用函数外部变量,需要先用global进行声明,否则无法访问,这是PHP与其他程序语言的一个区别。事例代码:
<?php
$a=1;
functiontest(){
echo $a;
}
test();//这里将不能输出结果“1”。
functiontest2(){
global $a;
echo $a;
}
test2();//这样可以输出结果“1”。
?>
还有一种写法:
<?php
$var=0;
function test($index)
{
$GLOBALS["var"]=$GLOBALS["var"]+1;
echo "The ".$index." number is ".$GLOBALS["var"]."<br>";
}
test(1);
test(2)
?>
可变变量:
所谓可变变量,就是一个变量的变量名可以动态的设置和使用。
<?
//变量的变量
$a="hello";
$$a="world"; //$$a此时就是$hello;
echo"$a$hello";//将输出"helloworld"
echo"$a${$a}";//同样将输出"helloworld"
?>
常量:
常量在PHP中必须用下面的方式定义:
bool define ( string name, mixed value ,[bool case_insensitive] )
name 为常量名,value为常量的值。case_insensitive]为大小写敏感。默认为敏感。例如:
<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
echo Constant; // outputs "Constant" and issues a notice.
define("GREETING", "Hello you.", true);
echo GREETING; // outputs "Hello you."
echo Greeting; // outputs "Hello you."
?>
常量和变量不同:
-
常量前面没有美元符号($);
-
常量只能用 define() 函数定义,而不能通过赋值语句;
-
常量可以不用理会变量范围的规则而在任何地方定义和访问;
-
常量一旦定义就不能被重新定义或者取消定义;
-
常量的值只能是标量。
PHP同时支持标量数组和关联数组,可以使用list()和array()来创建数组,数组下标从0开始。如:
<?
$a[0]="abc";
$a[1]="def";
$b["foo"]=13;
$a[]="hello";//$a[2]="hello"
$a[]="world";//$a[3]="world"
$name[]="jill";//$name[0]="jill"
$name[]="jack";//$name[1]="jack"
?>
关联参数传递:
关联参数传递(&的使用),两种方法。例:
<?
//方法一:
function foo(&$bar){
$bar.="and something extra";
}
$str="This is a String,";
foo($str);
echo $str;//output:This is a String, and something extra
echo"<br>";
//方法二:
function foo1($bar){
$bar.="and something extra";
}
$str="This is a String,";
foo1($str);
echo $str;//output:This is a String,
echo"<br>";
foo1(&$str);
echo $str;//output:This is a String, and something extra
?>
函数默认值:
PHP中函数支持设定默认值,与C++风格相同。
<?
function makecoffee($type="coffee"){
echo "making a cup of $type.\n";
}
echo makecoffee(); //"making a cup of coffee"
echo makecoffee("espresso");//"making a cup of espresso"
/*
注意:当使用参数默认值时所有有默认值的参数应该在无默认值的参数的后边定义。否则,程序将不会按照所想的工作。
*/
PHP的几个特殊符号意义:
$变量
&变量的地址(加在变量前)
@不显示错误信息(加在变量前)
->类的方法或者属性
=>数组的元素值
?:三元运算子
include()与require():
如果要根据条件或循环包含文件,需要使用include()。
require()语句只是被简单的包含一次,任何的条件语句或循环等对其无效。
由于include()是一个特殊的语句结构,因此若语句在一个语句块中,则必须把他包含在一个语句块中。
<?
//下面为错误语句
if($condition)
include($file);
else
include($other);
//下面为正确语句
if($condition){
include($file);
}else
{
include($other);
}
?>