В php при инициализации класса, как передать переменную этому классу, которая будет использоваться в ее функциях?

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

Спасибо, Сэм

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

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

Как следует из других ответов, вы должны использовать синтаксис унифицированного конструктора ( __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, и вы больше не должны использовать ее для нового кода.

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

 $obj = new Object($some, $parameters); class Object { function __construct($one, $two) {} } 

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

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

Вот как я

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

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

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

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

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

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

Ничего себе, я не могу поверить в ответы здесь! Они все будут работать, но будут неправильными, правильный способ установить переменные – это геттер и сеттер, это позволяет вам аккуратно настроить вашу переменную и выполнить проверки и т. Д. например

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

Это хороший способ сделать это, а на больших проектах и ​​сценариях вы будете этому рады, у меня возникает эта проблема прямо сейчас с скриптом some-else, который не может быть легко обновлен, потому что он был написан другими способами, упомянутыми в этом стр.

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

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

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