В php при инициализации класса как передать переменную этому классу для использования в его функциях? - PullRequest
38 голосов
/ 27 января 2009

Так что вот сделка. Я хочу вызвать класс и передать ему значение, чтобы оно могло использоваться внутри этого класса во всех различных функциях и т. Д. ЭСТ. Как бы я поступил так?

Спасибо, Sam

Ответы [ 7 ]

56 голосов
/ 27 января 2009

Я хочу вызвать класс и передать ему значение, чтобы его можно было использовать внутри этого класса

Концепция называется "конструктор".

Как указывают другие ответы, вы должны использовать унифицированный синтаксис конструктора (__construct()) начиная с PHP 5. Вот пример того, как это выглядит:

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, и вы больше не должны использовать ее для нового кода.

33 голосов
/ 27 января 2009

В новых версиях PHP (5 и выше) функция __constuct вызывается всякий раз, когда вы используете "new {Object}", поэтому, если вы хотите передать данные в объект, добавьте параметры в функцию конструкции и затем вызовите

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

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

Именованные конструкторы исключаются из PHP в пользу метода __construct.

20 голосов
/ 01 октября 2010
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) 

против

Person(array('isFat' => true, 'canRunFast' => false)) 
12 голосов
/ 14 ноября 2009

Вот как я делаю мои

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 будет написано на странице не очень полезный пример, потому что вы предпочли бы передать значение для добавления при вызове, но это иллюстрирует смысл.

3 голосов
/ 27 января 2009

Вы можете сделать это так:

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

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

или вы можете использовать __construct вместо SomeClass для конструктора в php5.

0 голосов
/ 21 февраля 2011

Ух ты, я не могу поверить в ответы здесь! Все они будут работать, но они ошибочны, правильный способ установки переменных - с помощью метода получения и установки, это позволяет вам аккуратно устанавливать переменные и выполнять проверки и т.д. на них. например,

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");

По сути, это не более понятно, чем использование функции.

0 голосов
/ 19 октября 2010

Думаю, здесь все упускают очевидное. Да, конструктор PHP4 устарел, но вы можете написать свой класс для обратной совместимости, например так:

class myClass {

    var $myVar;

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

    function __construct() { // PHP5 constructor
        doSomeStuff($myVar);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...