Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> PHP

PHP में Object Instantiate करके Method Same Line पर Call करना


PHP 5.4+ से, आप object को instantiate करके method को एक ही expression में call कर सकते हैं - "method chaining" या "fluent interface" के लिए उपयोगी।

मूल सिंटैक्स (PHP 5.4+)

// Parentheses आवश्यक हैं
$result = (new MyClass())->myMethod();

// Arguments के साथ
$result = (new MyClass($arg1, $arg2))->myMethod($arg3);

पूर्ण उदाहरण

<?php
class Calculator {
    private $value;
    
    public function __construct($initial = 0) {
        $this->value = $initial;
    }
    
    public function add($n) {
        $this->value += $n;
        return $this; // Chaining के लिए $this return करें
    }
    
    public function multiply($n) {
        $this->value *= $n;
        return $this;
    }
    
    public function getResult() {
        return $this->value;
    }
}

// Method chaining - एक ही line पर
$result = (new Calculator(10))
    ->add(5)
    ->multiply(2)
    ->getResult();

echo $result; // 30

// या बिना chaining के single call
echo (new Calculator(5))->add(3)->getResult(); // 8

Static Factory Methods के साथ

<?php
class User {
    private $name;
    private $email;
    
    private function __construct($name, $email) {
        $this->name = $name;
        $this->email = $email;
    }
    
    public static function create($name, $email) {
        return new self($name, $email);
    }
    
    public function greet() {
        return "Hello, {$this->name}!";
    }
}

// One-liner with factory
echo (User::create('अमित', 'amit@example.com'))->greet();
// Output: Hello, अमित!

Anonymous Classes (PHP 7+) के साथ

<?php
// Quick object creation
$logger = (new class {
    public function log($msg) {
        echo "[LOG] $msg\n";
    }
})->log('Application started');

// Interface implementation
$handler = (new class implements Countable {
    private $items = [];
    public function add($item) { $this->items[] = $item; }
    public function count() { return count($this->items); }
})->add('item1')->add('item2');

echo $handler->count(); // 2

व्यावहारिक उपयोग मामले

पैटर्नउदाहरण
Builder Pattern(new QueryBuilder())->select('*')->from('users')->where('id', 1)->get()
DTO Creation(new UserDTO())->setName('John')->setEmail('john@test.com')
Validation(new Validator($data))->required('email')->email('email')->validate()
Configuration(new Config())->set('debug', true)->set('env', 'prod')

सीमाएं

  • केवल PHP 5.4+ में काम करता है
  • Constructor arguments के लिए parentheses आवश्यक: (new Class($arg))
  • Method को $this return करना चाहिए chaining के लिए
  • Debugging थोड़ा कठिन हो सकता है (stack traces में anonymous points)
  1. लिनक्स और कमांड लाइन में महारत हासिल करने में मदद करने वाले 5 कोर्स लिनक्स और कमांड लाइन में महारत हासिल करने में मदद करने वाले 5 कोर्स

    लिनक्स एक उत्कृष्ट ऑपरेटिंग सिस्टम है, जिसमें हुड के नीचे शानदार सुरक्षा और अनुकूलन विकल्प हैं। आपकी पूरी मदद करने के लिए, लिनक्स पावर यूजर बंडल पांच कोर्स प्रदान करता है जो बुनियादी बातों से कमांड लाइन विजार्ड्री तक प्रगति करते हैं। अभी, आप MakeUseOf Deals के माध्यम से सभी 181 वीडियो $19 में प्राप्

  1. Samsung फोन पर AR Zone ऐप क्या है और क्या आप इसे हटा सकते हैं? Samsung फोन पर AR Zone ऐप क्या है और क्या आप इसे हटा सकते हैं?

    चाहे आपने बिल्कुल नया Samsung स्मार्टफोन खरीदा हो या अपने वर्तमान Samsung डिवाइस को Android 10 पर अपडेट किया हो, आपने अपने ऐप पेज पर कुछ नए ऐप्स तैरते हुए देखे होंगे। इन नए ऐप्स में से एक को AR Zone कहा जाता है। यहां AR Zone ऐप के बारे में वह सब कुछ है जो आपको जानने की जरूरत है, जिसमें इसका उपयोग क

  1. जावा में invokeLater() मेथड को कैसे कॉल करें? जावा में invokeLater() मेथड को कैसे कॉल करें?

    invokeLater() मेथड SwingUtilities क्लास का एक स्टैटिक मेथड है और इसका उपयोग AWT इवेंट डिस्पैचर थ्रेड में असिंक्रोनसली कार्य करने के लिए किया जा सकता है। SwingUtilities.invokeLater() मेथड SwingUtilities.invokeAndWait() की तरह काम करता है सिवाय इसके कि यह अनुरोध को इवेंट क्यू पर रखता है और तुरंत वापस