Подтвердить что ты не робот

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

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

Спасибо, Сэм

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

Вот как я делаю свое

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

Ответ 5

Вы можете сделать это следующим образом:

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

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

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

Ответ 6

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

class myClass {

    var $myVar;

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

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

Ответ 7

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

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

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