php 常量、变量用法详细介绍

这里总结了PHP初学者容易感到困惑的10个问题,供大家参考。

澳门新浦京电子游戏,变量:

1、页面之间无法传递变量

get,post,session在最新的php版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用$_GET[‘foo’],$_POST[‘foo’],$_SESSION[‘foo’]来得到。当然也可以修改自动全局变量为开(php.ini改为register_globals
= On);考虑到兼容性,还是强迫自己熟悉新的写法比较好。

注:PHP中的超全局变量

从PHP 4.2.0 开始,register_globals 的默认值为
off,这样一来,以前的很多可以直接使用的变量,如 $PHP_SELF
或者你设定的SESSION变量都不能用
“$变量名”的形式访问了,这可能会给你带来很多不变,但却有助于安全性的提高。访问这些变量,你需要使用PHP
超全局变量,如下:

$_SERVER

变量由 Web 服务器设定或者直接与当前脚本的执行环境相关联。类似于旧数组
$HTTP_SERVER_VARS
数组。以前的$PHP_SELF对应$_SERVER[‘PHP_SELF’],你可以使用phpinfo来查看你的$_SERVER变量。

$_GET

经由 HTTP GET 方法提交至脚本的变量。类似于旧数组 $HTTP_GET_VARS 数组。

$_POST

经由 HTTP POST 方法提交至脚本的变量。类似于旧数组 $HTTP_POST_VARS
数组。

$_COOKIE

经由 HTTP Cookies 方法提交至脚本的变量。类似于旧数组 $HTTP_COOKIE_VARS
数组。

$_SESSION

当前注册给脚本会话的变量。类似于旧数组 $HTTP_SESSION_VARS 数组。

$_FILES

经由 HTTP POST 文件上传而提交至脚本的变量。类似于旧数组
$HTTP_POST_FILES 数组。

$_ENV

执行环境提交至脚本的变量。类似于旧数组 $HTTP_ENV_VARS 数组。

对于$_FILES变量:(文件域字段为“myfile”)

$_FILES[‘myfile’][‘name’]

客户端机器文件的原名称(包括路径)。

$_FILES[‘myfile’][‘type’]

文件的 MIME 类型,需要浏览器提供该信息的支持,例如“image/gif”。

$_FILES[‘myfile’][‘size’]

已上传文件的大小,单位为字节。

$_FILES[‘myfile’][‘tmp_name’]

文件被上传后在服务端储存的临时文件名(包括路径)。

$_FILES[‘myfile’][‘error’]

和该文件上传相关的错误代码。[‘error’] 是在 PHP 4.2.0 版本中增加的。

当 php.ini 中的 register_globals 被设置为 on 时,$myfile_name 等价于
$_FILES[‘myfile’][‘name’],$myfile_type 等价于
$_FILES[‘myfile’][‘type’]等。

变量用于存储值,比如数字、文本字符串或数组。

2、win32下的session不能正常工作

php.ini默认的session.save_path = /tmp

这显然是linux下的配置,win32下php无法读写session文件导致session无法使用,把它改成一个绝对路径就可以了,例如session.save_path
= c:windowstemp。

一旦设置了某个变量,我们就可以在脚本中重复地使用它。

3、显示错误信息

当php.ini的display_errors = On并且error_reporting =
E_ALL时,将显示所有的错误和提示,调试的时候最好打开以便纠错,如果你用以前php写法错误信息多半是关于未定义变量的。变量在赋值以前调用会有提示,解决办法是探测或者屏蔽,例如显示$foo,可以if(isset($foo))
echo$foo 或者echo @$foo

PHP 中的所有变量都是以 $ 符号开始的。

4、header already sent

这个错误通常会在你使用HEADER的时候出现,他可能是几种原因:1,你在使用HEADER前PRING或者ECHO了2.你当前文件前面有空行3.你可能INCLUDE了一个文件,该文件尾部有空行或者输出也会出现这种错误。

在 PHP 中设置变量的正确方法是:

5、更改php.ini后没有变化

重新启动web server,比如IIS,Apache等等,然后才会应用最新的设置。

6、有时候sql语句不起作用,对数据库操作失败。最简便的调试方法,echo那句sql,看看变量的值是否能得到。

$var_name = value;

7、include和require的区别

两者没有太大的区别,如果要包含的文件不存在,include提示notice,然后继续执行下面的语句,require提示致命错误并且退出。根据测试,win32平台下它们都是先包含后执行,所以被包含文件里最好不要再有include或require语句,这样会造成目录混乱。或许*nux下情况不同,暂时还没测试。如果一个文件不想被包含多次可以使用include_once或require_once##
读取,写入文档数据:

function r($file_name) {
$filenum=@fopen($file_name,"r");
@flock($filenum,LOCK_SH);
$file_data=@fread($filenum,filesize($file_name));
@fclose($filenum);
return $file_data;
}
function w($file_name,$data,$method="w"){
$filenum=@fopen($file_name,$method);
flock($filenum,LOCK_EX);
$file_data=fwrite($filenum,$data);
fclose($filenum);
return $file_data;
}

PHP 的入门者往往会忘记在变量的前面的 $
符号。如果那样做的话,变量将是无效的。

8、isset和empty的区别

两者都是测试变量用的,但是isset是测试变量是否被赋值,而empty是测试一个已经被赋值的变量是否为空。如果一个变量没被赋值就引用在php里是被允许的,但会有notice提示。如果一个变量被赋空值,$foo=””或者$foo=0或者
$foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。要注销一个变量,可以用
unset($foo)或者$foo=NULL。

让我们试着创建一个存有字符串的变量,和一个存有数值的变量:

9、mySQL查询语句包含有关键字

php查询mysql的时候,有时候mysql表名或者列名会有关键字,这时候查询会有错误。例如表名是order,查询时候会出错,简单的办法是sql语句里表名或者列名加上`[tab键上面]来加以区别,例如select
* from `order`。

<?php
$txt = “Hello World!”;
$number = 16;
?> 

10、通过HTTP协议一次上传多个文件的方法

有两个思路,是同一个方法的两种实现。具体程序还需自己去设计

1. 在form中设置多个文件输入框,用数组命名他们的名字,如下:

<form action="" method="post">
<input name="usefile" type="file">
</form>

这样,在服务器端做以下测试

echo "<pre>";
print_r($_FILES);
echo "</pre>";

2. 在form中设置多个文件输入框,但名字不同,如下:

<form action="" method="post">
<input name="usefile_a" type="file">
<input name="usefile_b" type="file">
<input name="usefile_c" type="file">
</form>

在服务器端做同样测试:

echo "<pre>";
print_r($_FILES);
echo "</pre>";

 

1.如何定义变量,它和C# 等语言有什么不同呢?
   PHP
中的变量用一个美元符号后面跟变量名来表示。变量名是区分大小写的。例如:

<?php
 $var=’Jim’;
  $VAR=’Kimi;
  echo “$var,$VAR”;//输出“Jim,Kimi”
 

 ?>

你可能还关心变量的命名,其实和大多数语言一样。

  1. 变量区分大小写吗?
       如 1里说的,区分大小写。
     
    注意,需要说明的一点是自PHP4以来,引入了引用赋值的概念,其实和多数语言的引用类似,不过我觉得最类似的是C/C++.因为它也用到了”&”符号。例如:

 <?php
 $foo = ‘Bob’;              // 赋值’Bob’给foo
 $bar = &$foo;              // 通过$bar引用.注意&符号
 $bar = “My name is $bar”;  // 修改 $bar
 echo $bar;
 echo $foo;                // $foo 也修改了.
 ?> 

和其他语言一样,只能对有变量名的变量才可以引用。

好了现在大家对变量应该有一个大概的了解了,现在我们看看变量的间接引用和字符串连接。

①变量的间接引用: 先看个例子吧

<?
 $a = “b”;
 $$a = “123”;
 echo $b;
?>
 

 

上面的输出结果是123

我们可以看到在第二行代码中多了一个$,并通过指定的名称访问变量,指定的名字存储在$a(“b”)中,并把这个变量$b的值更改为123。因此,这样的$b的变量被创建和赋值。

通过在变量的前面增加附加的$标记,你可以任意增加引用的次数。

 ②字符串连接: 先看个例子吧

<?
$a = “PHP 4” ;
$b = “功能强大” ;
echo $a.$b;
?>
 

 

需要注意的是 在PHP 4.2.0 以及后续版本中,PHP 指令 register_globals
的默认值为 off。这是 PHP 的一个主要变化。让 register_globals 的值为 off
将影响到预定义变量集在全局范围内的有效性。例如,为了得到 DOCUMENT_ROOT
的值,将必须使用 $_SERVER[‘DOCUMENT_ROOT’] 代替
$DOCUMENT_ROOT,又如,使用 $_GET[‘id’] 来代替 $id 从
URL  ?id=3 中获取 id 值,亦或使用
$_ENV[‘HOME’] 来代替 $HOME 获取环境变量 HOME 的值

我们看到代码的第三行,英文的(句)号,它可以将字符串连接起来,变成合并的新字符串。

  超全局变量 描述
$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
数组(依然有效,但反对使用)
 

常量:

常量是一个简单值的标识符(名字)。如同其名称所暗示的,在脚本执行期间该值不能改变(除了所谓的魔术常量,它们其实不是常量)。常量默认为大小写敏感。通常常量标识符总是大写的。

常量名和其它任何 PHP
标签遵循同样的命名规则。合法的常量名以字母或下划线开始,后面跟着任何字母,数字或下划线。用正则表达式是这样表达的:[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*

 

①是在程序执行期间无法改变的数据,常量的作用域是全局的。

②常量的命名与与变量相似,只是不带美元符号“$”。一个有效的常量名由字母或者下划线开头,后面跟报上任意数量的字母、数字或者下划线。

③一般在PHP中常量都为大写字母而且又分为系统常量和自定义常量。

 

系统常量我们就大概说了 ,这个在后面的知识会介绍到。

1、__FILE__    默认常量,是指PHP程序文件名及路径;
2、__LINE__    默认常量,是指PHP程序的行数;
3、__CLASS__    类的名称;

自定义常量:通过define()函数来定义一个常量的,

其语法格式为:bool define ( string $name, mixed $value [, bool
case_$insensitive] )

name:指定常量的名称。
value:指定常量的值。
insensitive:指定常量名称是否区分大小写。如果设置为true则不区分大小写;如果设置为false则区分大小写。如果没有设置该参数,则取默认值false。

<?php

// 合法的常量名
define(“FOO”,     “something”);
define(“FOO2”,    “something else”);
define(“FOO_BAR”, “something more”);

// 非法的常量名
define(“2FOO”,    “something”);

// 下面的定义是合法的,但应该避免这样做:(自定义常量不要以__开头)
// 也许将来有一天PHP会定义一个__FOO__的魔术常量
// 这样就会与你的代码相冲突
define(“__FOO__”, “something”);

?>

几个 PHP 的“魔术常量” 名称 说明
__LINE__ 文件中的当前行号。
__FILE__
文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自
PHP 4.0.2 起,__FILE__
总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
__DIR__
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于
dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP
5.3.0中新增) =
__FUNCTION__ 函数名称(PHP 4.3.0 新加)。自 PHP 5
起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4
中该值总是小写字母的。
__CLASS__ 类的名称(PHP 4.3.0 新加)。自 PHP 5
起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4
中该值总是小写字母的。
__METHOD__ 类的方法名(PHP 5.0.0
新加)。返回该方法被定义时的名字(区分大小写)。
__NAMESPACE__
当前命名空间的名称(大小写敏感)。这个常量是在编译时定义的(PHP 5.3.0
新增)

原文来源: 转载必须注明出处。


发表评论

电子邮件地址不会被公开。 必填项已用*标注