Передать параметры классу php

В 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 », поэтому, если вы хотите передать данные в объект, добавьте параметры функции 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-> = $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"); 

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

Источник

Передача объектов параметрами

Давайте сделаем еще и класс EmployeesCollection , который будет хранить массив работников, то есть массив объектов класса Employee .

Пусть работники будут храниться в свойстве employees , а для добавления работников будет существовать метод add . Этот метод параметром будет принимать объект класса Employee и записывать его в конец массива $this->employees :

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

Давайте проверим работу класса EmployeesCollection :

add(new Employee(‘john’, 100)); $employeesCollection->add(new Employee(‘eric’, 200)); $employeesCollection->add(new Employee(‘kyle’, 300)); echo $employeesCollection->getTotalSalary(); // выведет 600 ?>

Давайте сделаем наш класс EmployeesCollection более жизненным и добавим метод получения всех работников и метод подсчета:

employees; > // Подсчитываем количество хранимых работников: public function count() < return count($this->employees); > public function add($employee) < $this->employees[] = $employee; > public function getTotalSalary() < $sum = 0; foreach ($this->employees as $employee) < $sum += $employee->getSalary(); > return $sum; > > ?>

Сделайте класс Product , в котором будут приватные свойства name , price и quantity . Пусть все эти свойства будут доступны только для чтения.

Добавьте в класс Product метод getCost , который будет находить полную стоимость продукта (сумма умножить на количество).

Сделайте класс Cart . Данный класс будет хранить список продуктов (объектов класса Product ) в виде массива. Пусть продукты хранятся в свойстве products .

Реализуйте в классе Cart метод add для добавления продуктов.

Реализуйте в классе Cart метод remove для удаления продуктов. Метод должен принимать параметром название удаляемого продукта.

Реализуйте в классе Cart метод getTotalCost , который будет находить суммарную стоимость продуктов.

Реализуйте в классе Cart метод getTotalQuantity , который будет находить суммарное количество продуктов (то есть сумму свойств quantity всех продуктов).

Реализуйте в классе Cart метод getAvgPrice , который будет находить среднюю стоимость продуктов (суммарная стоимость делить на количество всех продуктов).

Источник

Как ввести внешнюю переменную в класс PHP?

Например есть у меня некая $var и есть
class MyClass
<
//Внутри которого несколько функций
function name1()
<
>
function name2()
<
>
>
Вводить внутрь функций я умею используя global $var; Но для введя в name1() эту переменную я не могу ее использовать в name2() и та ее прийдется в свою очередь тоже декларировать. А вот как мне ее прописать в самом классе один раз и использовать во всех функциях внутри этого класса?

Не совсем правильно тогда сформулировал вопрос. Опишу подробнее. Есть PDO который сам по себе класс, подключаю $db = new PDO(. ); Далее у меня есть еще один класс, который обрабатывает данные class MyClass <>, в его методы (извиняюсь что обозвал их функциями) $db только через global подключается, иначе выдает Undefined variable. Мой вопрос был как раз про это, как мне включить $db внутрь класса MyClass <> без необходимости подключения в каждой функции через глобал? Функций у меня десятка два внутри этого класса и везде прописывать как то неправильно, что то должно быть такое что позволит $db использовать внутри MyClass <> без глобалов. Нашелся вариант сделать MyClass как extends PDO но что то мне кажется это тоже неправильно.

class MyClass <
var $db
function __construct()
<
$this->db = new PDO(. );
>
function name1()
<
$this->db .
>
>

Во первых внутри классов нет функций, а есть методы
Во вторых тебе это для чего, то что ты пишешь бред какой то 🙂

Можете тебе нужны свойства?

class MyClass
<
private $var;

function name1()
<
// Обращаемся к свойству как $this->var;
>
function name2()
<
// Обращаемся к свойству как $this->var;
>
>

Источник

Читайте также:  Making a html webpage
Оцените статью