classTransaction { //имя класса = имя файла. один файл на один классpublicfloat$amount; // свойства классаpublicstring$description; // можно определить тип данныхpublic$public; // доступно вездеprivate$private; // доступно только внутри класса protected$protected; // доступно только внутри класса а так же наследникам класса//магический метод, запускается каждый раз при создании экземпляраpublicfunction__construct()(float$amount, string$description){ $this->amount = $amount;$this->description = $description;// $this - относится к вызываемому объекту }publicfunctionaddTax(float$rate){ // метод класса$this->amount += $this->amount * $rate / 100; }publicfunctionaddTax(float$rate): Transaction { // метод с возвратом значения// на случай если нам нужна цепочка методов$this->amount += $this->amount * $rate / 100;return$this }publicfunctiongetPrivate(): float { // для получения значений приватных свойствreturn$this->private; }publicfunction__destruct(){echo"Ну вот и все...";// деструктор можно использовать для закрытия связи с ресурсами (бд к примеру)// в случаях когда данные уже получены и других взаимодействий не требуется// срабатывает автоматически когда ссылок на объект уже не осталось (ниже по коду)// ну или принудительно $transaction = null; или exit; где угодно }}//если нет автозагрузки классов тоrequire_once'path/to/transaction.php';//в нужном месте кода создаем экземпляр класса$transaction = newTransaction(15,'transaction');$transaction->amount; // получить значение свойства класса$transaction->amount = 20;// изменить значение свойства класса$transaction = newTransaction(15,'transaction');$transaction->addTax(8);// создать экземпляр из переменной$class= 'someClass';$variable = new$class();
object
//stdClass - Пустой класс общего назначения с динамическими свойствами.$str = '{"a":1,"b":2,"c":3}';$arr = json_decode($str,true); // станет ассоциативным массивомecho$arr['a']; // 1$arr = json_decode($str); // экземпляр класса. ключи -> свойстваecho$arr->a; // 1//создание пустого экземпляра$obj = newstdClass(); // еще короче = (object) null;$obj->a = 1; //свойство будет создано//одномерные массивы -> object$arr = [1,2,3];$obj = (object)$arr;echo$obj->{1}; // 2 тут индексы -> свойства//скалярный тип$obj = (object) 1;echo$obj->scalar; // 1// для чисел, чисел с плавающей точкой, строк, логических значений
classCustomer{public ?PaymentProfile$paymentProfile = null;}classPaymentProfile {publicint$id;publicfunction__construct(){$this->id = rand(); }} classTransaction{public ?Customer$customer = null; // может быть не обязательным__construct(publicfloat$amount;privatestring$description; ){ }}$transaction = newTransaction(5,'text');echo$transaction->customer->paymentProfile->id; // вот за это бан, что то может быть nullecho$transaction->customer?->paymentProfile->id;// так безопасно, если customer = null то выполнение прервется// и вся конструкция целиком вернет null а не warning// еще актуальнее если бы было ->customer()->// потому что customer()->.. ?? 'если null' не будет работать вовсе