|  | Posted by Rob Wilkerson on 12/02/07 14:01 
On Dec 2, 7:59 am, Jerry Stuckle <jstuck...@attglobal.net> wrote:> Rob Wilkerson wrote:
 > > On Dec 1, 11:46 pm, Jerry Stuckle <jstuck...@attglobal.net> wrote:
 > >> No, let's see your entire method - and more importantly, the code that's
 > >> calling it.  You shouldn't need to do any of the stuff you're doing
 > >> here.  You have something else wrong, but my crystal ball is broken.
 > >> So, without the code it's impossible to see what you've got.
 >
 > > Okay, then you need a little more background, maybe.  I'm working to
 > > adapt someone else's custom function into an object oriented
 > > architecture.  The original function (and definition of constants) can
 > > be found athttp://www.pgregg.com/projects/php/preg_find/preg_find.phps.
 >
 > > My object oriented translation requires just a few changes to the
 > > function itself and they're really just syntax changes - except for
 > > translating the bitwise expression.
 >
 > > CALLING THE METHOD:
 >
 > > require_once ( 'org/client/file/finder.php' );
 > > $finder = new Finder();
 > > $result = $finder->preg_find ( '/image\.php$/', '/path/to/my/includes/
 > > org/client/content', 'PREG_FIND_RECURSIVE|PREG_FIND_RETURNASSOC' );
 > > new PHPDump ( $result );
 > > exit();
 >
 > > Note that the flag definitions do not exist yet.  If the single quotes
 > > in the third argument are removed then the normal (and expected)
 > > "constant not defined" errors are thrown.  Nor, for that matter, do I
 > > *want* them to exist here.  I want to keep them with the code where
 > > they matter rather than defining them everywhere they're used.
 > > Similarly, I want to continue to be able to use the flags because
 > > they're more readable than passing in the bit values themselves.
 >
 > > METHOD CHANGES:
 >
 > > class Finder {
 > >    const PREG_FIND_RECURSIVE     = 1;
 > >    const PREG_FIND_DIRMATCH      = 2;
 > >    const PREG_FIND_FULLPATH      = 4;
 > >    const PREG_FIND_NEGATE        = 8;
 >
 > >    /**
 > >     * All of the additional flag constants defined similarly
 > >     *
 > >     * SNIP -->
 > >     */
 >
 > >    public function preg_find ( $pattern, $start_dir='.', $args=NULL ) {
 > >            /**
 > >             * Go through the business of evaluating the bit string.
 > >             */
 > >            $args_in = $args;       /** Save off the input string */
 > >            $tmp     = preg_split ( '/([|&^~])/', $args,
 > > -1 ,PREG_SPLIT_DELIM_CAPTURE );
 > >            $args    = '';
 >
 > >            foreach ( $tmp as $arg ) {
 > >                    $args .= defined ( "self::$arg" ) ? constant ( "self::$arg" ) :
 > > $arg;
 > >            }
 >
 > >            /**
 > >             * Back to doing what we need to do using the bitwise expression
 > > that is expected.
 > >             */
 > >            static $depth = -1;
 > >            ++$depth;
 >
 > >            /**
 > >             * SNIP -->
 > >             */
 > >    }
 > > }
 >
 > > Aside from the code shown at the top of the method, only the following
 > > changes from the original were made:
 >
 > > - The syntax of all references to a flag within the method was changed
 > > to "self::FLAG_NAME".
 > > - In the recursive call to the method, the arguments being passed are
 > > the original arguments saved off at the top of the method.
 >
 > > I've found no other changes that are required thus far.
 >
 > > Once again, I appreciate your help.
 >
 > The flags do exist in your code, because you've defined them.  Your
 > problem is in how you're using them.
 >
 > You defined the constants in the class, so you need to scope them to the
 > class, i.e. Finder::PREG_FIND_RECURSIVE.
 
 Bingo.  I didn't realize constants could be accessed that way.  And,
 as is usually the case, I find it clearly spelled out that way in the
 docs once I kind of understand what I'm looking for.
 
 Thanks for your help.
  Navigation: [Reply to this message] |