1

我试图在一个类中调用一些“全局/静态”变量($agent,$version),但我不知道如何将它们插入到类本身中。基本上我声明了类 "$myclass = new myClass($agent, $version) 但我不知道如何在类中调用这些变量(例如在 getProducts 函数中使用它们)。我知道这些问题听起来很愚蠢,但我只是不明白。

索引.php:

$myclass = new myClass($agent, $version);

$agent = "firefox";
$version = "234";

$catalog = $myClass->$getProducts("http://amazon.com", "red");

myclass.class.php :

class myClass {
    function getXML ($agent, $version) {
        //do something 
        return $
    }

    function getProducts ($url, $color) {
        $product = $this->getXML($agent, $version);
        $catalog =  str_replace("asus", "", $product);
        return $catalog
    }

}
4

4 回答 4

1

听起来静态变量不是您要寻找的,最好避免使用,除非您知道自己在做什么(它们不是真正面向对象的,在 PHP 5.3+ 中根本不需要)。从您提供的代码看来,您希望将参数传递给对象实例化 ( new),因此您应该为接受参数的类创建一个构造函数,并将它们分配给要在方法中使用的实例变量。

于 2013-01-19T19:04:03.190 回答
1

您可以使用 static 关键字声明它们。

来自http://php.net/manual/en/language.oop5.static.php

class Foo
{
    public static $my_static = 'foo';

    public function staticValue() {
        return self::$my_static;
    }
}

print Foo::$my_static . "\n";
于 2013-01-19T19:05:36.703 回答
0

我想你的意思不是“静态”变量而是“属性”:

class myClass {
    // Declare the properties
    private $agent, $version;

    public function __construct($agent, $version) {
        // Copy the arguments to the class members
        $this->agent = $agent;
        $this->version = $version;
    }

    public function getProducts($url, $color) {
        $product = $this->getXML();
        // ...
    }

    private function getXML() {
        // Use the values stored in $this->agent etc.
        $agent = $this->agent;
        // ...
    }
}

用法:

$agent = "firefox";
$version = "234";
$instance = new myClass($agent, $version);
$catalog = $instance->getProducts("http://amazon.com", "red");
于 2013-01-19T19:04:13.893 回答
0

这也是错误的:

function getProducts ($url, $color){
  $product = $this->getXML($agent, $version);
  $catalog =  str_replace("asus", "", $product);
  return $catalog
}

您不能在 getXML 方法中传递 $agent 和 $version 变量,除非您不先构造它们,或者在 getProducts 方法中传递它们。

于 2013-01-19T19:11:32.543 回答