在PHP初始化类时,如何将变量传递给该类以在其函数中使用?

时间:2009-01-27 18:10:17

标签: php variables class

所以这是交易。我想调用一个类并将值传递给它,以便它可以在所有各种函数中的类中使用。等。我该怎么做呢?

谢谢, 萨姆

7 个答案:

答案 0 :(得分:56)

  

我想调用一个类并将值传递给它,以便可以在该类中使用

这个概念被称为“构造函数”。

正如其他答案所指出的那样,从PHP 5开始,您应该使用the unified constructor syntax__construct())。以下是一个示例:

class Foo {
    function __construct($init_parameter) {
        $this->some_parameter = $init_parameter;
    }
}

// in code:

$foo = new Foo("some init value");

注意 - 您可能会在遗留代码中遇到所谓的旧样式构造函数。它们看起来像这样:

class Foo {
    function Foo($init_parameter) {
        $this->some_parameter = $init_parameter;
    }
}

自PHP 7起,此表单已正式弃用,您不应再将其用于新代码。

答案 1 :(得分:33)

在新版本的PHP(5及更高版本)中,每当使用“new {Object}”时都会调用函数__constuct,因此如果要将数据传递给对象,请将参数添加到构造函数中,然后调用< / p>

$obj = new Object($some, $parameters);

class Object {
    function __construct($one, $two) {}
}

命名构造函数正在逐步退出PHP,转而使用__construct方法。

答案 2 :(得分:20)

class SomeClass
{
    public $someVar;
    public $otherVar;

    public function __construct()
    {
        $arguments = func_get_args();

        if(!empty($arguments))
            foreach($arguments[0] as $key => $property)
                if(property_exists($this, $key))
                    $this->{$key} = $property;
    }
}

$someClass = new SomeClass(array('someVar' => 'blah', 'otherVar' => 'blahblah'));
print $someClass->someVar;

这意味着从长远来看维护工作量减少了。

传递的变量的顺序不再重要了,(不再写'null'这样的默认值:someClass(null,null,true,false))

添加新变量不那么麻烦(不必在构造函数中编写赋值)

当您查看类的实例化时,您将立即知道传入的变量与之相关:

Person(null, null, true, false) 

vs

Person(array('isFat' => true, 'canRunFast' => false)) 

答案 3 :(得分:12)

这就是我的做法

class MyClass {

       public variable;  //just declaring my variables first (becomes 5)
       public variable2; //the constructor will assign values to these(becomes 6)

       function __construct($x, $y) {
            $this->variable  = $x;
            $this->variable2 = $y;
       }

       function add() {
            $sum = $this->variable + $this->variable2
            return $sum;
       }

} //end of MyClass class

创建一个实例,然后调用函数add

$myob = new MyClass(5, 6); //pass value to the construct function
echo $myob->add();

11将写入页面 这不是一个非常有用的例子,因为你更喜欢在调用时传递值来添加,但这说明了这一点。

答案 4 :(得分:3)

你可以这样做:

class SomeClass
{
   var $someVar;
   function SomeClass($yourValue)
   {
       $this->someVar = $yourValue;
   }

   function SomeFunction()
   {
       return 2 * $this->someVar;
   }
}

或者您可以在php5中使用__construct而不是SomeClass作为构造函数。

答案 5 :(得分:0)

认为每个人都错过了这里显而易见的事实。是的,不推荐使用PHP4构造函数,但您可以将类编写为向后兼容,如下所示:

class myClass {

    var $myVar;

    function myClass { // PHP4 constructor, calls PHP5 constructor
        $this->__construct();
    }

    function __construct() { // PHP5 constructor
        doSomeStuff($myVar);
    }
}

答案 6 :(得分:-2)

哇,我不敢相信这里的答案!它们都会工作但是错误,设置变量的正确方法是通过getter和setter,这允许你整齐地设置变量并对它们执行检查等。 e.g。

class myClass {

    private $myVar;

    public function set_var($var) {  // You can then perform check on the data etc here
       $this->myVar = $var;
    }

    function __construct() { // PHP5 constructor

    }

    public function do_something() {
        echo "blah";
    } 

}

这允许你做的是正确地调用对象,例如

$objNew = new myClass();
$objNew->set_var("Set my variable");
$objNew->do_something();

这是做这件事的整洁方式,对于大型项目和脚本你会很高兴,我现在遇到这个问题,其他的脚本无法轻易更新,因为它是用其他方式编写的本页提到。

它还允许您为该类提供无限数量的变量,而不会对该对象进行愚蠢的调用,例如

$objNew = new myClass("var1","var1","var1","var1","var1","var1","var1","var1","var1","var1","var1","var1","var1","var1","var1","var1","var1");

这基本上不比使用函数更清晰。