【问题标题】:Using global string in PHP inside function more than once在 PHP 内部函数中多次使用全局字符串
【发布时间】:2016-10-04 07:03:03
【问题描述】:

所以我有一个看起来像这样的类...

class foo{
    private $url = ""

    function createURL($contryCode){
        global $url;
        $url = 'google'
        echo $url;
        if($url == ''){exit()}
        $fullURL = "http://" . $url . $countryCode . "/";
        return $fullURL;
     }
}

在下一个脚本中,我将其称为......

$address = $foo -> createURL(".us");

它将全局输出为“google”并通过对 null 的检查,但是当我连接它时,它会用 null 值填充字符串。除了“全球很糟糕”之外,我找不到原因。

有人有什么想法吗?

编辑:更多信息... $address 用“http:///”(http:// 和 / 常量,但不是全局变量)填充。

【问题讨论】:

  • 代码确实按预期工作,尽管它有些混乱。问题是为什么你显然没有看到你所期望的。您必须添加更多信息才能为我们提供帮助...
  • 哦,是不是你遇到了一个你没有意识到的语法错误,因为你没有监控你的 http 服务器错误日志文件?请注意$foo -> createURL(".us"); 确实是一个语法错误,它必须是$foo->createURL(".us");,并且$foo 必须是foo 类型的有效对象(类和对象!)...

标签: php global-variables concatenation global


【解决方案1】:

方法实现本身看起来不错,正如我在上面的评论中提到的。但是,我的印象是您还没有完全理解如何使用您的类定义。看看这个简单的例子:

<?php
class foo{
    private $url = ""

    function createURL($contryCode){
        global $url;
        $url = 'google'
        echo $url;
        if($url == ''){exit()}
        $fullURL = "http://" . $url . $countryCode . "/";
        return $fullURL;
     }
}

$fooObj = new foo;
$address = $fooObj->createURL(".us");
var_dump($address);

附注:在大多数情况下,全局变量确实被认为是不好的样式。但是,这并不意味着它们通常不会按预期工作。全局变量有两个主要问题,您当然应该避免它们:1. 使用此类全局变量很难调试和维护软件;2. 它们经常与使用相同全局变量的库和 pear 类等其他代码发生冲突变量名称,这会导致意外行为。

【讨论】:

  • 这是一个更完整版本的代码,我正在调用一个类实例的函数。但是 $address 仍然没有返回任何东西,但像全局变量这样的常量甚至都不在那里。
  • 对不起,你的问题不清楚,我不得不假设一些事情。
  • 正如 cmets 中已经提到的:查看您的 http 服务器错误日志文件,您可能会在其中发现一些警告。如果不监视该日志文件,您就无法在 php 中编程。
  • 我在 php 错误日志中看到的唯一一件事是 curl 无法连接,并且 ISS 似乎非常高兴。我不知道是怎么回事。也对问题的混乱状态感到抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 2016-03-24
相关资源
最近更新 更多