Итак, вот сделка. Я хочу вызвать класс и передать ему значение, чтобы он мог использоваться внутри этого класса во всех различных функциях ect. ЭСТ. Как мне это сделать?
Спасибо, Сэм
Итак, вот сделка. Я хочу вызвать класс и передать ему значение, чтобы он мог использоваться внутри этого класса во всех различных функциях 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)
vs
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();
Это отличный способ сделать это, а на больших проектах и сценариях вы будете этому рады, у меня есть эта проблема прямо сейчас с каким-то script, который не может быть легко обновлен, потому что он написан в другие способы, упомянутые на этой странице.
Он также позволяет вам иметь неограниченное количество переменных для класса без глупого вызова объекта, например.
$objNew = new myClass("var1","var1","var1","var1","var1","var1","var1","var1","var1","var1","var1","var1","var1","var1","var1","var1","var1");
В основном это не яснее, чем использование функции.