2006/02/17

learn:学习php,变量

tags:learn,php,变量,学习笔记
变量:
  命名规则:[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
    $i站点is = 'mansikka'// 合法变量名;可以用中文
  引用附值:& $a = &$b;//修改$a的值会影响到$b
   
只有有名字的变量才可以引用赋值$a = &(24*7) //error!
    function &GetLogin (){   return $_SESSION[ 'Login']; }//works
    function &GetLogin (){   return &$_SESSION[ 'Login']; }//error
    function &GetLogin (){   $ret = & $_SESSION['Login' ];   return $ret;
    }//works

$my_variable_{$type}_name = true;//error
$n="my_variable_{$type}_name";
${$n} = true;
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 数组(依然有效,但反对使用)。详细信息请参阅 POST 方法上传
$_ENV
执行环境提交至脚本的变量。类似于旧数组 $HTTP_ENV_VARS 数组(依然有效,但反对使用)。
$_REQUEST
经由 GET,POST 和 COOKIE 机制提交至脚本的变量,因此该数组并不值得信任。所有包含在该数组中的变量的存在与否以及变量的顺序均按照 php.ini 中的 variables_order 配置指示来定义。此数组在 PHP 4.1.0 之前没有直接对应的版本。参见 import_request_variables()
     自 PHP 4.3.0 起,$_FILES 中的文件信息不再存在于 $_REQUEST 中。
     //兼容以前的版本
     if (!isset($_SERVER) && isset($HTTP_SERVER_VARS))
       define('_SERVER', 'HTTP_SERVER_VARS');
      or
if (!isset($_SERVER))
{
   $_GET    = &$HTTP_GET_VARS;
   $_POST    = &$HTTP_POST_VARS;
   $_ENV    = &$HTTP_ENV_VARS;
   $_SERVER  = &$HTTP_SERVER_VARS;
   $_COOKIE  = &$HTTP_COOKIE_VARS;
   $_REQUEST = array_merge($_GET, $_POST, $_COOKIE);
}
//将_post中的数据设置为变量
foreach (
$_POST as $key => $value)

{
       switch ($key)
       {
               case "submitted_var_1"://已知的变量名
               case "submitted_var_2":
               case "submitted_var_3":
                       $$key = $value; break;
               case "dangerous_var":
                       $value = do_something_special_with($value );//预定义的处理
                       $$key = $value;
                       break;
       }
}
变量范围
  1.
变量的范围即它定义的上下文背景(也就是它的生效范围)。大部分的 PHP 变量只有一个单独的范围。这个单独的范围跨度同样包含了 include 和 require 引入的文件。
  2.但是,在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内。
  3.PHP 中全局变量在函数中使用时必须申明为全局。 global
$a = 1;$b = 2;
function Sum(){
   global $a, $b;
   $b = $a + $b; }
Sum();
echo $b;
   在全局范围内访问变量的第二个办法,是用特殊的 PHP 自定义 $GLOBALS 数组。
$a = 1;$b = 2;
function Sum(){  $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b' ]; }
Sum(); echo $b;

function test_global(){
   // 大多数的预定义变量并不 "super",它们需要用 'global' 关键字来使它们在函数的本地区域中有效。
   global $HTTP_POST_VARS;
   echo $HTTP_POST_VARS['name'];
   // Superglobals 在任何范围内都有效,它们并不需要 'global' 声明。Superglobals 是在 PHP 4.1.0 引入的。
   echo $_POST['name'];
}
   4. 变量范围的另一个重要特性是静态变量(static variable)。静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。 static
function Test(){
   static $count = 0;
   $count++;   echo $count;
   if ($count < 10) {       Test();   }
   $count--; }

class
test  {

   var $var;   var $static_var;
   function test() {    static $s;    $this ->static_var =& $s;   }
}
 $a=new test(); $a-> static_var=4; $a->var =4; $b=new test();
 echo $b->static_var ; //this will output 4
 echo $b->var; //this will output nul
${$a[1]} ,${$a}[1]
   在 PHP 的函数和类的方法中, 超全局变量不能用作可变变量。
$a = "hello";
$b = "world";
${$a}{$b} = "Wrong";
${$a} . "_" . {$b} = "Wrong";
${$a . "_" . $b} = "You got it";
print $hello_world; // Prints "You got it";
${$a . $b} = "You got it again";
print $helloworld; // Prints "You got it again";

$getar = $_GET;
$getkeys = array_keys($getar);
for($i=0; $i<count($getkeys); $i++){
 $k = $getkeys[$i];
 $v = $getar[$k];
 ${$k}=$v;
}

$_POST['username'] $_REQUEST['username']
import_request_variables('p', 'p_'); echo $p_username;
//表单例子
<?php
   if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
   echo '<pre>';
   print_r($_POST);
   echo
'<a href="'. $_SERVER['PHP_SELF' ] .'">Please 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
}
?>
//bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )
//http://www.php.net/manual/zh/function.setcookie.php
<?php
  setcookie
("MyCookie[foo]", 'Testing 1', time()+3600);
 
setcookie("MyCookie[bar]", 'Testing 2' , time()+3600);
?>



为什么我又没有收到blogger的email回置,是因为两篇文章发布的时间太近吗?!郁闷ing...



--
[:p] --fallseir.lee

没有评论: