Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
Invocar metodo Private por reflexion
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  1 message - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
pAk0s  
View profile   Translate to Translated (View Original)
 More options Apr 27 2012, 11:12 am
From: pAk0s <wariod...@gmail.com>
Date: Fri, 27 Apr 2012 08:12:01 -0700 (PDT)
Local: Fri, Apr 27 2012 11:12 am
Subject: Invocar metodo Private por reflexion

Saludos!!!

La pregunta es si alguien sabe si se puede invocar un metodo private por
reflexion.

el punto es que tengo un controlador encargado de eliminar todas la
entidades.. la gran mayoria con un delete a un campo de db basta pero
algunas veces hay que hacer otras cosas antes de eliminar la entidad, para
ello en primera instancia se me ocurrio algo asi:

<?php

namespace controles;
-------------------------------------
class Del {
    public $em;
    public function index() {
        $entitie = $_GET["e"];
        $ob = $this->em->find($entitie, $_GET["id"]);        
        switch ($_GET["e"]) {
            case 'Entidad1':
                   //logica previa a eliminar la entidad Entidad1.
                break;
                 .
                 .
                 .
            case 'EntidadN:                          
            default:
        }
        $this->em->remove($ob);
        $this->em->flush();
        if (isset($_POST["ajax"])) {
            header("Content-type:application/json");
            die(json_encode(array("error" => false)));
        }
        header("Location:" . $_SERVER["HTTP_REFERER"]);
    }

}

---------------------------------------------------

luego se me ocurio que seria mas limpio tener por separado la logica de
cada entidad que requiriera una logica extra. eso lo logro colocando la
logica en otros metodos dentro del controlador pero como el controlador es
visible desde url haciendo los metodos privados vasta para que no puedan
ser invocados desde URL, el provema es que al parecer ReflectMethod no
puede invocar metodos privados :S

esto es lo que intento hacer:

-----------------------------------------------------

<?php

namespace controles;

class Del {

    public $em;
    private function Entidad1{
      //logica previa para eliminar Entidad1
    }
    *private *function Entitdad....
    .
    .
    .
    *private *function EntidadN{
      //logica previa para eliminar EntidadN
    }
    public function index() {
        $entitie = $_GET["e"];
        $ob = $this->em->find($entitie, $_GET["id"]);
        if(method_exists($this, $entitie)){
            $refecMeth = new \ReflectionMethod($this, $entitie);        
            $refecMeth->invoke($this, $ob);
        }
        $this->em->remove($ob);
        $this->em->flush();
        if (isset($_POST["ajax"])) {
            header("Content-type:application/json");
            die(json_encode(array("error" => false)));
        }
        header("Location:" . $_SERVER["HTTP_REFERER"]);
    }

}

-----------------------------------------------------

y lo que obtengo es un Exception :

Fatal error: Uncaught exception 'ReflectionException' with message 'Trying
to invoke private method controles\Del::Entidad1() from scope
ReflectionMethod'

por lo pronto lo solucion haciendo public el metodo con la logica previa..
pero me gustaria mas que esto quedarán privado... -_- ... ¿alguien sabe
como invocar esos metodos privados :S.... ?, entido por que no se podria
invocar un metodo privado desde otra clase.. pero en este caso se supone
que lo estoy tratando de invocar desde la misma clase, lo unico que tendria
que decirle a ReflectionMethod que usara el scope de la clase donde esta
siendo invocada.. pero no se si se pueda.. por lo pronto lo que se me ha
ocurrido no ha funcionado...


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »