Intereting Posts

метод вызова класса (с конструкторами) без создания объекта в php

Я посмотрел и попытался, но я не могу найти ответ.

В PHP можно вызвать функцию-член класса (когда этот класс требует, чтобы конструктор получал параметры), не создавая экземпляр его как объекта?

Пример кода (который дает ошибки):

<?php class Test { private $end=""; function __construct($value) { $this->end=$value; } public function alert($value) { echo $value." ".$this->end; } } //this works: $example=new Test("world"); $example->alert("hello"); //this does not work: echo Test("world")::alert("hello"); ?> 

    К сожалению, у PHP нет поддержки для этого, но вы творческий и выглядящий парень: D

    Вы можете использовать «заводскую», образец:

     <?php class Foo { private $__aaa = null; public function __construct($aaa) { $this->__aaa = $aaa; } public static function factory($aaa) { return new Foo($aaa); } public function doX() { return $this->__aaa * 2; } } Foo::factory(10)->doX(); // outputs 20 

    Просто сделайте это (в PHP> = 5.4):

     $t = (new Test("Hello"))->foo("world"); 

    Я тоже искал один лайнер, чтобы выполнить это как часть одного выражения для преобразования дат из одного формата в другой. Мне нравится делать это в одной строке кода, потому что это единая логическая операция. Итак, это немного загадочно, но позволяет создавать и использовать объект даты в одной строке:

     $newDateString = ($d = new DateTime('2011-08-30') ? $d->format('F d, Y') : ''); 

    Другим способом однострочного преобразования строк даты из одного формата в другой является использование вспомогательной функции для управления частями OO кода:

     function convertDate($oldDateString,$newDateFormatString) { $d = new DateTime($oldDateString); return $d->format($newDateFormatString); } $myNewDate = convertDate($myOldDate,'F d, Y'); 

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

    Вы не можете вызвать метод уровня экземпляра без экземпляра. Ваш синтаксис:

     echo Test("world")::alert("hello"); 

    не имеет большого смысла. Либо вы создаете встроенный экземпляр, либо сразу отбрасываете его, либо метод alert() не имеет никакого имплицитного экземпляра.

    Предполагая, что:

     class Test { public function __construct($message) { $this->message = $message; } public function foo($message) { echo "$this->message $message"; } } 

    ты можешь сделать:

     $t = new Test("Hello"); $t->foo("world"); 

    но синтаксис PHP не позволяет:

     new Test("Hello")->foo("world"); 

    что в противном случае было бы эквивалентным. Есть несколько примеров этого в PHP (например, с использованием индексации массива при возврате функции). Так оно и есть.