2010-12-09 13 views
0

Ok Ich weiß, dass ich private Eigenschaften haben kann, die verhindern, dass eine Eigenschaft außerhalb der Klasse verwendet wird, aber ist es möglich, diese Eigenschaft auch außerhalb der Klasse unsichtbar zu machen?PHP unsichtbare Klasseneigenschaften

Was ich meine ist, ist es möglich, einen Weg zu machen, so dass die Eigenschaft nicht einmal angezeigt wird, wenn ich eine print_r() oder foreach() der Klasse mache?

+0

Ich erinnere mich, es gab eine Diskussion darüber vor einiger Zeit, und es gab einige PHP-Versionen, die diese Eigenschaften nicht zeigen. Leider kann ich es im Moment nicht finden. Gibt es einen besonderen Grund, warum Sie nicht möchten, dass sie angezeigt werden? Reflexion könnte immer noch verwendet werden, um sie zu sehen. –

+0

Hier zwei Fehlerberichte, http://bugs.php.net/bug.php?id=39118&edit=2 und http://bugs.php.net/bug.php?id=35822&edit=1. Wie Sie in der Antwort sehen können, handelt es sich nicht um einen Fehler, sondern um eine Funktion. –

Antwort

0

global einige obskuren Variablennamen in allen Methoden und nutzen sie, wie Eigenschaften

ich es nie getan sehen wollen würde zu, noch weiß ich, warum Sie durch die Entwickler Eigenschaften von Inspektion verstecken wollen, aber ich Angenommen, es würde funktionieren.

+0

Ich mache eine aktive Record-Klasse für PHP für mein Framework, jeder Datensatz ist eine eigene Klasse mit den Daten als Eigenschaften. Ich habe eine Speichermethode in jeden Datensatz implementiert, aber damit es funktioniert, muss eine Eigenschaft mit der darin enthaltenen Datenbankklasse verwendet werden. Ich möchte nicht extra Code schreiben müssen, um diese Eigenschaft zu entfernen, wenn ich einen Datensatz durchblättere, also hoffte ich, dass es eine Möglichkeit gibt, diese Eigenschaft zu verbergen. Wie du, ich denke auch, es ist unklug, ein globales zu verwenden, ich muss es vielleicht tun. –

0

Sie können Eigenschaften von Debugfunktionen wie print_r/var_dump nicht ausblenden. was Sie können jedoch tun, ist Eigenschaften zu simulieren __get/__set verwendet wird, wie folgt aus:

<?php 
class MyClass { 
    public function __get($name) { 
     if($name == "bar") { 
     /* take bar from somewhere */ 
     } 
    } 
    public function __set($name, $value) { 
     if($name == "bar") { 
     /* store $value somewhere */ 
     } 
    } 
} 

$foo = new MyClass(); 
$foo->bar = 1; 

Auf diese Weise können Sie mit foo- $ arbeiten> bar, als ob es sich um eine Eigenschaft waren, obwohl in der Tat keine solche Eigenschaft vorhanden Wenn Sie var_dump, etc ..