Итак, вот сделка. Я хочу вызвать класс и передать ему значение, чтобы он мог использоваться внутри этого класса во всех различных функциях 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");
Это в основном не яснее, чем использование функции.