多数大学生出来选择的工作和专业无关
首页 > 专业知识

概论为什么PHP全局变量不能生效

时间:2018-04-01 17:39:10 [来源]:郑州PHP培训学校

   概论为什么PHP全局变量不能生效

  我们应当通过尽量减少多级和函数中include文件来防范PHP全局变量不能生效这一问题。实在不行,我们就尽量不用全局变量。
  对于一个新手在实际操作PHP语言定义一个全局变量的时候,往往会出现很多问题。比如,他们会一直以为,全局变量(使用global声明)是在程序的所有地方都可以用的(不然怎么能叫全局?呵)。
  但在实际操作时,会接连碰到几次全局变量无效的郁闷的事,下面就重点看一下PHP全局变量不能生效的原因及解决办法。
  1.PHP全局变量不能生效错误重现
  问题出现在用我的简易框架时,在view中使用原来第三方定义好的函数时(此函数比较独立),下面模拟一下:
  t1.php
  < ?
  run(); //执行
  function run(){
  include 'func.php';
  showGlobal();
  }
  ?>
  func.php1
  < ?
  $vars = 'I am global!';
  function showGlobal(){
  global $vars;
  print('我使用全局变量:'.$vars);
  }
  ?>
  很简单的两个文件(第一次发现问题时,远比这复杂,在一层层排错后,得出最少化的问题重现环境),func.php是定义好的第三方函数,该函数使用了一些全局变量,如果这时把这两个文件放在一起,执行一下t1.php,会发现showGlobal里的$vars是显示不出来的,global失效了?
  2.PHP全局变量不能生效错误原因
  搜索后发现,php.net上很早就有人提出过,也有人给出了解释:
  原来,在t1.php的run函数中include func.php时,func.php中的变量$vars的作用域只是在run之内,而在showGlobal中使用global声明的$vars是要求属于t1.php的不是run函数的,所以为空)3.PHP全局变量不能生效解决方法
  知道原因后,解决就很简单,可以把include 从run中移出来,这样,func.php中的$vars就属于t1.php了;也可以在run里用global声明一下$vars,这样也可以把原来属于run的$vars声明为全局(属于t1.php);虽然问题可以简决,但用起来还是很不爽, 因为在我的phpec框架中,include的情况比较普遍,不可能把view中按需include的移到外层去,使用global的话,我在使用第三方函数时,又不会也不想去了解它用了什么全局变量,而且,层次结构一多,就….
  PHP全局变量不能生效的原因总结:
  1)尽量减少多级和函数中include文件.
  2)尽量不用全局变量
  技巧总结 正确使用PHP JSON扩展
  PHP JSON扩展的应用中可以使用上两个函数,包括:encode 和 decode。我们可以使用这些函数实现数据对象转换为一组序列化数据的功能。
  PHP JSON扩展的应用方法对于刚刚接触PHP语言不久的小菜鸟们肯定是非常陌生的。我们在接下来的内容中将会针对这一应用方法做一个详细的介绍。
  JSON 是一项旨在允许中间件创建使用 JavaScript 固有格式的对象的协议。它最强大的属性是它是一种轻量级协议。简单处理 RSS 聚合或 recipe 列表时,您不需要在 JavaScript 中使用 XML 的全部功能。不需要验证格式或确保严格的数据键入。
  PHP JSON扩展编码和解码
  有两个函数用于PHP JSON扩展:encode 和 decode。第一个函数将把任意类型的数据对象转换为一组序列化数据,以供 JavaScript 处理。第二个函数将把序列化数据解码,并将其转换为基本 PHP 对象或联合数组。我们来看一看 json_decode()。
  json_decode() 的示例
  < ?php
  $jsonObject = '{"21":{"url":"www..com\/story1.html","title":"JSON is sweeping
  AJAX world","viewed":false},"22":{"url":
  "www..com\/story2.html","title":"JSONis great","viewed":false}}';
  $decodedObject = json_decode($jsonObject);$decodedArray = json_decode($jsonObject, true);print_r($decodedObject);
  echo "< br>< br>";
  print_r($decodedArray);
  ?>
  如上,我们有一个 PHP 脚本,该脚本将获取 $jsonObject 并将其解码回 PHP 固有对象。我们进行了两次解码。第一次,使用未经修改的用法,这将得到 stdClass 的对象;第二次,使用布尔型参数来创建联合数组。
  以下是decode的输出:
  stdClass Object ( [21] =>
  stdClass Object ( [url] =>
  www..com/story1.html [title] =>
  JSON is sweeping AJAX world [viewed] =>
  ) [22] => stdClass Object ( [url] =>
  www..com/story2.html [title] =>
  JSON is great [viewed] => ) ) Array ( [21] =>
  Array ( [url] => www..com/story1.html[title] => JSON is sweeping AJAX world
  [viewed] => ) [22] => Array ( [url] =>
  www..com/story2.html [title] =>
  JSON is great [viewed] => ) )
  我们再来看看encode:
  < ?php
  $results = array("21" =>
  array("url" =>
  "www..com/story1.html", "title" =>
  "JSON is sweeping AJAX world", "viewed" =>
  FALSE), "22" => array("url"=>
  "www..com/story2.html", "title" =>
  "JSON is great", "viewed" => FALSE));
  $jsonObject = json_encode($results);
  echo $jsonObject;
  ?>
  没有使用递归。没有添加标记。只需将其传入 json_encode() 函数,然后它将从另一端作为 JSON 序列化对象传出。
  结束语
  JSON 是一种有用的、轻量级协议,现在可用于 PHP V5.2,它可以轻松地实现从 PHP 应用程序中提取出数据,并将其放入 Ajax 应用程序的过程。相应地,PHP JSON扩展同样也是轻量级且十分有用的,只包含两个易于使用的函数。
  使用这些函数,我们可以转换和导出对象结构,还可以使用 json_encode() 使来自 PHP 数据库连接的数据可用于 Ajax 应用程序。在 Ajax 应用程序中处理完数据后,可以将数据返回 PHP 脚本并用 json_decode() 重新创建可用的对象数据结构。当把数据返回到 PHP 后,我们可以将其存储到数据库中,或使用 PHP 提供的众多选择中的任何其他数据处理方法。
  详细介绍PHP JSON类库应用范例
  PHP JSON类库通常被人们理解为一个自动完成JSON编码与解码的工具。在这篇文章介绍的内容中对此做了一个详细的介绍,希望对大家有所帮助。
  PHP JSON类库对于一个刚入门不久PHP学习者来说是比较陌生的词汇。我们在文章中将会以一个例子来详细介绍PHP JSON类库的用法。
  JSON一种轻量级的数据格式,由一位资深的软件工程师Douglas Crockford开发,全称为Javascript Object Notation。中文翻译为“JavaScript对象表示”,这个格式的数据可以很容易的被转换为javascript对象的格式,用于服务器端和客 户端的数据传递,用于解决xml的过多冗余标签造成数据传输量过大的问题。
  PHP JSON类库是一个自动完成JSON编码和解码的php开源代码工具。
  下载:http://www.eb163.com/code/json.rar
  其中的TEST_JSON.php中包含了PHPUnit.php,是PEAR自带的单元测试工具,实际开发中可以不用。
  PHP JSON类库示例代码:
  < ?
  //create a new instance of Services_JSON
  require_once('JSON.php');
  $json = new Services_JSON();
  // convert a complex value to JSON notation$value = array('name'=>'coollzh'
  ,'age'=> 22,'data'=>'foo');
  $output = $json->encode($value);
  print($output);
  //采用post方式发送数据: json=
  {"name":'coollzh',"age":2,"data":"foo"}
  print($_REQUEST['json']);
  $value= $json->decode(str_replace
  ('\\','',$_REQUEST["json"]));
  var_dump( $value);
  echo "< br>".$value->data;
  ?>
  希望大家通过以上PHP JSON类库的代码示例,能初步了解它的具体含义。
 

上一篇:探究PHP浮点类型取整的使用规则

下一篇:使用PHP内置SOAP要点分析