Fondamentalement, ce que j'essaie de réaliser est de faire référence à l'objet d'un autre objet de la même classe - depuis l'intérieur d'une méthode. Ce serait parfait si ce qui suit fonctionnerait:
$this = new self;
Mais on ne peut pas réattribuer $this
en php. Je sais bien sûr, je peux retourner un autre objet de la méthode et l'utiliser, alors s'il vous plaît ne pas conseiller. La question est:
Comment puis-je faire de $this
un clone d'un autre objet de la même classe?
ou plus précisément,
Je veux un objet à revenir à un état spécifique qui a été précédemment enregistré.
EDIT: quelques exemples où cela pourrait être utile.
Supposons que vous ayez un objet Url qui accepte le contrôleur, l'action et bien d'autres choses. Vous allez devoir chercher beaucoup de liens avec le même, par exemple, le contrôleur et l'action, mais d'autres propriétés seront différentes. J'instancie l'objet avec les paramètres communs, appelle une méthode pour qu'il sauvegarde son état auquel il retourne après sortie d'un lien (IOW après la méthode __toString).
$defaultPath = Url::factory('controller','action1')->extraParams('status',0)->save();
echo $defaultPath->action('action2'); // this has action2 as action and a status 0 as extra params
echo $defaultPath->extraParams('status',2); // this has action1 as action and 2 as status
Une autre utilisation est I une table CLMS et je configurer chaque colonne comme un objet je passe à l'objet principal de la table. Après avoir passé la colonne I lancer une méthode de remise à zéro sur la colonne, donc je peux avoir le code comme ce qui suit:
$column->field = 'layouts_id';
$column->value = $layoutId;
$dbInput->addColumn($column);
$column->field = 'pages_id';
$column->value = $pagesId;
$dbInput->addColumn($column);
Dans les deux cas, j'économiser beaucoup de code et de la confusion, ne pensez-vous pas?
on le clonerait avant de le passer au La méthode addColumn, ou l'écrasement peut être rendu facultatif (par exemple, '$ dbInput-> addColumn ($ column, TRUE);' ne réinitialiserait pas la colonne, c'est un snap à implémenter.) – raveren
Mais encore, ce n'est pas ce à quoi quelqu'un s'attendrait . Quand j'utilise un objet, je veux y faire face. Je ne voudrais pas d'une méthode de lecture d'une classe non apparentée pour effacer mon objet. C'est comme si vous prêtiez votre livre à quelqu'un qui efface les lettres quand il a fini de lire. (Et je ne voudrais pas lui dire explicitement, qu'il ne devrait pas les effacer.Comme je l'ai dit, ce n'est pas un comportement que vous attendez normalement) –
pour refléter vos modifications: Je ne voudrais pas d'étapes supplémentaires dans l'initialisation de la table CRUD, même si elles sont valides (donc, +1). Cependant, la méthode de réinitialisation ne conserve pas le code DRY, vous devez synchroniser les valeurs initiales à deux endroits et c'est juste une bombe à retardement. – raveren