【问题标题】:PHP - Variable returns NULL when setting in if statementPHP - 在 if 语句中设置时变量返回 NULL
【发布时间】:2018-01-08 00:15:25
【问题描述】:

我有点像一个业余的 php 程序员,我正在寻求有关 if 语句的帮助,但该语句没有按我的预期工作。

<?php

var_dump($_GET['name']);
var_dump($_GET['id']);
var_dump($search);
var_dump($param);
var_dump($raw);
var_dump($json);

// for debugging
error_reporting(E_ALL);
ini_set('display_errors', 'on');

// choose between either the name or id parameter
if(isset($_GET['name'])) {
    $search = $_GET['name'];
}
elseif(isset($_GET['id'])) {
    $search = $_GET['id'];
}

// build parameters for either name OR id
if (isset($_GET['name'])) {
    $param = http_build_query(array(
        'name' => $_GET['name'],
        'getMembers' => 'yes',
        'rand' => rand(),
    ));
}
elseif (isset($_GET['id'])) {
    $param = http_build_query(array(
        'id' => $_GET['id'],
        'getMembers' => 'yes',
        'rand' => rand(),
    ));
}

// get raw json from server
$raw = file_get_contents("https://example.com/file.php?".$param);

// decode the raw json response
$json = json_decode($raw);

... ?>

请注意我是如何将变量转储到第三行以进行调试的。 $search$param$raw$json 每次都返回 NULL。我认为这与 if 语句有关,但我无法弄清楚我的生活是什么。帮助将不胜感激。干杯!

编辑:

好的!我们正在到达某个地方!我将var_dump($json); 移到页面下方,结果出现了这个混乱:

object(stdClass)#2 (2) { ["guild"]=> object(stdClass)#1 (11) { ["guild_id"]=> string(3) "182" ["guild_name"]=> string(7) "Jiggmin" ["creation_date"]=> string(19) "2013-05-07 10:32:02" ["active_date"]=> string(19) "2013-05-07 10:32:02" ["member_count"]=> string(1) "1" ["emblem"]=> string(18) "default-emblem.jpg" ["gp_total"]=> string(1) "0" ["gp_today"]=> string(1) "0" ["owner_id"]=> string(7) "1939717" ["note"]=> string(13) "Hehe, trolls." ["active_count"]=> string(1) "0" } ["members"]=> array(1) { [0]=> object(stdClass)#3 (6) { ["user_id"]=> string(7) "1939717" ["name"]=> string(11) "snuppaper97" ["power"]=> string(1) "1" ["rank"]=> string(2) "23" ["gp_today"]=> NULL ["gp_total"]=> NULL } } }

然后我尝试在第 58 行执行 echo $json; 并得到了这个怪物:

**Recoverable fatal error:** Object of class std class could not be converted to string in /Path/To/File.php on line 58

【问题讨论】:

  • GET 的输出是什么? var_dump
  • 执行完所有操作后将var_dump($search); var_dump($param); var_dump($raw); var_dump($json);放在最后一行并检查。
  • 它们是在哪里定义的?
  • 顺便说一句,从全局中解脱出来
  • 在这种情况下不需要global

标签: php variables if-statement file-get-contents isset


【解决方案1】:

它们位于脚本的顶部,因此这些变量尚未定义!

var_dump($search);
var_dump($param);
var_dump($raw);
var_dump($json);

在您将它们设置为某物之前,它们总是会为空!变量应该来自哪里?移动下面的 var_dumps,你可能会开始看到东西:-)

编辑:现在你有一个 stdClass 的对象。要对其进行 json 编码,我们必须将其转换为数组!很简单:

$array = (array) $object;
$json = json_encode($array);

【讨论】:

  • 谢谢!正在取得进展!请查看我的编辑。
【解决方案2】:
  • 首先,不要使用全局变量,它们是一种非常古老且糟糕的 php 编码方式。
  • 而不是isset($_GET['name']) 使用array_key_exists('name', $_GET) 因为isset($_GET['name']) 如果设置为NULL 则返回false,如果您不希望null 也明确添加null !== $_GET['name'],这样您就知道代码是什么做。

您的参数似乎没有默认值,例如,如果它们都没有设置,则不会有新的参数字符串构建

您能否向我们提供一个示例 url 以及您构建该 url 的代码?或者你在哪里使用$param

【讨论】:

  • 所以我听取了其他人的建议,将var_dump($json); 父亲移到了 php 脚本中,得到了 php 无法处理的东西。如果您能提供帮助,请查看我的编辑和 lmk。谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-06-27
  • 2014-05-01
  • 1970-01-01
  • 2018-05-23
  • 2015-07-28
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
相关资源
最近更新 更多