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

PHP में Anonymous Objects बनाना


PHP 7+ में Anonymous Classes का उपयोग करके on-the-fly objects create करना।

मूल Syntax (PHP 7+)

<?php
// Simple anonymous object
$obj = new class {
    public $name = 'Anonymous';
    public function greet() {
        return "Hello, {$this->name}!";
    }
};

echo $obj->greet(); // Hello, Anonymous!

Parent Class Extend करना

<?php
class BaseModel {
    protected $id;
    protected $createdAt;
    
    public function __construct($id) {
        $this->id = $id;
        $this->createdAt = new DateTime();
    }
    
    public function getId() { return $this->id; }
    public function getCreatedAt() { return $this->createdAt; }
}

// Anonymous class extending BaseModel
$user = new class(123) extends BaseModel {
    public $name;
    public $email;
    
    public function __construct($id) {
        parent::__construct($id);
    }
    
    public function getFullInfo() {
        return "User {$this->name} ({$this->email}) - ID: {$this->getId()}";
    }
};

$user->name = 'अमित';
$user->email = 'amit@example.com';
echo $user->getFullInfo();

Interface Implement करना

<?php
interface LoggerInterface {
    public function log(string $message): void;
    public function getLogs(): array;
}

// Anonymous class implementing interface
$logger = new class implements LoggerInterface {
    private $logs = [];
    
    public function log(string $message): void {
        $this->logs[] = "[" . date('H:i:s') . "] $message";
    }
    
    public function getLogs(): array {
        return $this->logs;
    }
};

$logger->log('Application started');
$logger->log('User logged in');
print_r($logger->getLogs());

Constructor Arguments Pass करना

<?php
$handler = new class('api_key_123', 'https://api.example.com') {
    private $apiKey;
    private $baseUrl;
    
    public function __construct(string $apiKey, string $baseUrl) {
        $this->apiKey = $apiKey;
        $this->baseUrl = $baseUrl;
    }
    
    public function request(string $endpoint): array {
        // Simulate API call
        return ['status' => 'ok', 'endpoint' => $endpoint];
    }
};

$result = $handler->request('/users');

Use Cases

Use CaseExample
Test Doubles / MocksTesting में quick mock objects
One-off implementationsSingle-use interface implementations
Configuration objectsFluent builders
Event handlersInline callbacks with state
DTOs with behaviorData + methods together

Limitations

  • Named classes की तरह reusable नहीं
  • Type hints में उपयोग नहीं कर सकते (केवल object या interface)
  • Serialization issues हो सकते हैं
  • Reflection में anonymous class name unpredictable होता है

Comparison: Anonymous Class vs Closure

<?php
// Closure - single function, no state (or use &use)
$greeter = function($name) {
    return "Hello, $name!";
};

// Anonymous class - multiple methods, state, implements interfaces
$greeter = new class {
    private $greeting = 'Hello';
    
    public function setGreeting($g) { $this->greeting = $g; }
    public function greet($name) { return "{$this->greeting}, $name!"; }
    public function greetFormal($name) { return "Good day, $name."; }
};

// जब state और multiple methods चाहिए → anonymous class
// जब simple callback चाहिए → closure
  1. - PHP में एब्स्ट्रैक्ट क्लास समझाया गया

    PHP5 अपने साथ ऑब्जेक्ट-ओरिएंटेड मॉडल लाता है, ऑब्जेक्ट-ओरिएंटेड मॉडल की कुछ अवधारणाएं हैं: क्लास, ऑब्जेक्ट, एनकैप्सुलेशन, पॉलीमॉर्फिज्म, एब्स्ट्रैक्ट और फाइनल क्लासेज, और मेथड्स, इंटरफेसेस और इनहेरिटेंस, आदि... इस लेख में, हम एब्स्ट्रैक्ट क्लास और PHP में ऑब्जेक्ट-ओरिएंटेड तकनीकों से संबंधित इसकी व

  1. - PHP में get_class_methods() फंक्शन

    PHP में get_class_methods() फंक्शन क्लास मेथड्स के नाम प्राप्त करता है। यह name_of_class द्वारा निर्दिष्ट क्लास के लिए परिभाषित मेथड नामों की सरणी लौटाता है। त्रुटि की स्थिति में NULL लौटाता है। सिंटैक्स get_class_methods(class) पैरामीटर्स name_of_class - क्लास नाम। आवश्यक! रिटर्न वैल्यू name_o

  1. - PHP में class_exists() फंक्शन

    PHP में class_exists() फंक्शन जांचता है कि क्लास परिभाषित की गई है या नहीं। यदि क्लास एक परिभाषित क्लास है तो TRUE लौटाता है, अन्यथा FALSE। सिंटैक्स class_exists(class, autoload) पैरामीटर्स class - क्लास का नाम। autoload - डिफ़ॉल्ट रूप से __autoload को कॉल करना है या नहीं। रिटर्न वैल्यू यदि क्ल