Передача параметров в класс php

Как ввести внешнюю переменную в класс 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 .
>
>

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

Читайте также:  Php printf a href

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

class MyClass
<
private $var;

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

Источник

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

Давайте сделаем еще и класс 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: Классы и объекты

Поскольку именно классы описывают объекты, мы начнем описание с определения классов.

Определение класса

Класс — это шаблон кода, который используется для создания объектов. Класс определяется с помощью ключевого слова class после которого указывается произвольное имя класса. В имени класса может использоваться любое сочетание букв и цифр, но они не должны начинаться с цифры. Код, связанный с классом должен быть заключен в фигурные скобки, которые указываются после имени. Определение класса описывает, какие элементы будут содержаться в каждом новом экземпляре этого класса. На основе полученных данных давайте посмотрим синтаксис определения класса на примере:

Класс first из приведенного примера — уже полноправный класс, хотя пока и не слишком полезный. Но тем не менее мы сделали нечто очень важное. Мы определили тип, т.е. создали категорию данных, которые мы можем использовать в своих сценариях. Важность этого станет для вас очевидной по мере дальнейшего чтения главы.

Создание объекта

Так как класс — это шаблон для создания объектов, следовательно, объект — это данные, которые создаются и структурируются в соответствии с шаблоном, определенным в классе. Объект также называют экземпляром класса, тип которого определяется классом. Для создания нового экземпляра класса нам понадобится оператор new . Он используется совместно с именем класса следующим образом:

После оператора new указывается имя класса на основе которого будет создан объект. Оператор new создает экземпляр класса и возвращает ссылку на вновь созданный объект. Эта ссылка сохраняется в переменной соответствующего типа. В результате выполнения этого кода будет создано два объект типа first . Хотя функционально они идентичны (т.е. пусты) $obj1 и $obj2 — это два разных объекта одного типа, созданных с помощью одного класса.

Если вам все еще не понятно, давайте приведем аналогию из реальной жизни. Представьте, что класс — это форма для отливки, с помощью которой изготавливаются пластмассовые машинки. Объекты — это и есть машинки. Тип создаваемых объектов определяется формой отливки. Машинки выглядят одинаковыми во всех отношениях, но все-таки это разные предметы. Другими словами, это разные экземпляры одного и того же типа.

Давайте сделаем эти объекты немного интереснее, изменив класс first , добавив в него специальные поля данных, называемые свойства.

Определение свойств

В классе можно определить переменные. Переменные, которые определены в классе называются свойствами (или полями данных). Они определяются с одним из ключевых слов protected, public или private , характеризующих управление доступом. Эти ключевые слова мы рассмотрим подробно в следующей главе. А сейчас давайте определим некоторые свойства с помощью ключевого слова public :

Как видите, мы определили два свойства, присвоив каждому из них значение. Теперь любые объекты, которые мы будем создавать с помощью класса first , будут иметь два свойства с указанными значениями.

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

К свойствам объекта можно обращаться с помощь символов ‘ -> ‘, указав объект и имя свойства. Поскольку свойства объектов были определены как public , мы можем считывать их значения, а также присваивать им новые значения, заменяя тем самым начальные значения, определенные в классе:

 $obj = new first(); echo $obj->str; // присваиваем свойству объекта новое значение $obj->str = 'новая строка'; echo "
$obj->str"; ?>

На самом деле в PHP необязательно объявлять все свойства в классе. Свойства можно добавлять к объекту динамически:

 $obj = new first(); // добавляем объекту новое свойство $obj->newprop = 'новое свойство'; echo $obj->newprop; ?>

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

Работа с методами

Методы — это обычные функции, которые определяются внутри класса, они позволяют объектам выполнять различные задачи. Объявление метода напоминает определение обычной функции, за исключением предваряемого одного из ключевых слов protected, public или private . Если в определении метода вы опустите ключевое слово, определяющее видимость, то метод будет объявлен неявно как public . К методам объекта можно обращаться с помощь символов ‘ -> ‘, указав объект и имя метода. При вызове метода, так же как и при вызове функции нужно использовать круглые скобки.

str; > > $obj = new first(); // вызов метода объекта $obj->getstr(); ?>

Мы добавили метод getstr() к классу first . Обратите внимание на то, что при определении метода мы не использовали ключевое слово, определяющее область видимости. Это означает, что метод getstr() относится к типу public и его можно вызвать за пределами класса.

В определении метода мы воспользовались специальной псевдопеременной $this . Она используется для обращения к методам или свойствам внутри класса и имеет следующий синтаксис:

$this->имя переменной или метода

Значением переменной $this является ссылка на текущий объект. Чтобы стало понятнее посмотрите на следующий пример:

class first < public $str = 'some text'; // при определении метода в классе, переменная $this не имеет никакого значения function getstr() < echo $this->str; > > // создаем объект $obj = new first(); // созданный нами объект имеет свойство и метод // теперь в методе объекта переменная $this имеет // ссылку на текущий объект, а именно на $obj // т.е. если в методе заменить $this текущим экземпляром объекта $this->str; // это будет выглядеть как простое // обращение к свойству текущего объекта $obj->str;

Примечание: переменной $this нельзя ничего присваивать. Помните, что переменная $this всегда ссылается на текущий объект.

Специальный метод — конструктор

У класса может быть определен специальный метод — конструктор , который вызывается каждый раз при создании нового экземпляра класса (объекта) с целью инициализировать его, например установить значения свойств. Конструктор, как и любой другой метод может иметь параметры. Чтобы определить метод в качестве конструктора его необходимо назвать __construct() . Обратите внимание на то, что имя метода должно начинаться с двух символов подчеркивания. Посмотрим, как это работает:

num1 = $num1; $this->num2 = $num2; > // метод, который складывает два числа function summa() < return $this->num1 + $this->num2; > > // создаем объект и передаем два аргумента $obj = new first(15, 35); // вызываем метод и сразу выводим результат его работы echo $obj->summa(); ?>

Метод __construct вызывается, когда создается объект с помощью оператора new . Указанные в скобках аргументы передаются конструктору. В методе конструктора используется псевдопеременная $this для присвоения значений соответствующим свойствам создаваемого объекта.

Примечание: если конструктор не имеет параметров и при создании новых экземпляров класса не передаются никакие аргументы, круглые скобки () после имени класса можно опустить:

Указание типа аргумента в методах

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

 class wrong <> class write < // метод, который принимает аргументы только типа cat function getobj(cat $getCat) < // определяем параметр типа cat echo 'Получен объект типа cat'; >> // создаем экземпляр типа write $kitty = new write(); // работает: передали в качестве аргумента экземпляр типа cat $kitty->getobj( new cat() ); // здесь будет ошибка: передали в качестве аргумента экземпляр типа wrong $kitty->getobj( new wrong() ); ?>

Теперь в качестве аргумента методу getobj() можно передавать только экземпляры типа cat . Поскольку метод getobj() содержит уточнение типа класса, передача ему объекта типа wrong приведет к ошибке.

Указание типа нельзя использовать для определения параметров элементарных типов, таких как строки, числа и т.д. Для этой цели в теле метода следует использовать функции проверки типов, например is_string() . Также есть возможность определить, что передаваемый аргумент является массивом:

И последнее о чем осталось сказать: если параметр метода определяется с указанием определенного класса, разрешается указать значение по умолчанию, на случай, если методу не было передано никакого объекта. В качестве значения по умолчанию может быть использовано только значение NULL :

function getobj(cat $getCat = null) < $this->someVar = $getCat; >

Если вместо NULL указать какое-либо другое значение по умолчанию, будет выдана ошибка.

Копирование материалов с данного сайта возможно только с разрешения администрации сайта
и при указании прямой активной ссылки на источник.
2011 – 2023 © puzzleweb.ru

Источник

Оцените статью