2017-08-06 5 views
2

Ich habe die PHP-Dokumente durchforstet, um herauszufinden, ob es eine Methode gibt, mit der ich zwischen Instanzen einer integrierten Klasse (wie DateTime oder PDO) unterscheiden kann) und benutzerdefinierte Klassen, aber ohne Erfolg.Identifizieren zwischen internen Klassen von PHP und benutzerdefinierten Klassen

Der einzige Ansatz, den ich bisher gefunden habe, ist zu versuchen, eine Schließung an die Instanz zu binden. Wenn Sie dies mit einer integrierten Klasse tun, wird eine Warnung (yuk) angezeigt und eine Null zurückgegeben.

$targetObject = new DateTime(); 

$closure = function(); 

$test = @$closure->bindTo($targetObject, get_class($targetObject)); 
if ($test === false) { 
    throw new Exception('General failure'); 
} elseif ($test === null) { 
    throw new Exception('Unable to bind to internal class'); 
} 

Kennt jemand eine sauberere Herangehensweise an dieses Problem?

+2

Warum möchten Sie das wissen? – akond

+0

Ich möchte wissen, weil ich ein Testprogramm schreibe, das Bindung an das zu testende Objekt verwendet und den Fall der Bindung an das falsche Objekt behandeln möchte –

Antwort

6

Werfen Sie einen Blick auf die Reflexions-API. Manual

<?php 
$d = new DateTime(); 
$r = new ReflectionClass($d); 
echo ($r->isInternal());