Hey Simon,

PS, please don't top-reply as per mailinglist guidelines:
http://us2.php.net/reST/README.MAILINGLIST_RULES

On Fri, 28 Jun 2013, Simon Schick wrote:
> On Fri, Jun 28, 2013 at 7:10 PM, Derick Rethans <der...@php.net> wrote:
> 
> > On Fri, 28 Jun 2013, Simon Schick wrote:
> >
> > > I'd like to extend the API of php by a method.
> >
> > Great, let me know if you need any help with the implementation, or 
> > when you have any questions on how it currently works.
> 
> Sorry - I that was easy to missunderstand ;) I thought of providing 
> the idea. But I would happily also try to implement it by my own - 
> just to also have contributed to the php-core. If you could give me a 
> hint where to start - I feel quite lost in the code right now ... even 
> so I read the great tutorials about php-internals provided by Anthony 
> Ferrara.
> 
> And this may take some time! I've just started with C/C++.
> 
> Do you think this is an easy task to start? Depending on knowledge of 
> php-internals ;)

It's not that difficult, but not the easiest thing either. Basically, 
you have to do the following steps:

1. in ext/date/lib/interval.c add a function that has two arguments of 
   the timelib_rel_time* type. It should return a *new* 
   timelib_rel_time* structure that has the two intervals added up 
   together. It shouldn't change either of the original 
   timelib_rel_time* arguments. Add the function definition to 
   ext/date/lib/timelib.h too.
2. You can only add two timelib_rel_time* arguments if neither of 
   first_last_day_of, special, have_weekday_relative, and 
   have_special_relative are set. You can'd add a "first day of next 
   month" to a "+5 days" interval - it only works for simple y:m:d h:i:s 
   intervals.
3. In ext/date/php_date.c add:

   a. a new ARG_INFO struct after the one for 
      arginfo_date_interval_construct,
   b. Add a new method, "add" after 
      PHP_ME_MAPPING(createFromDateString, 
date_interval_create_from_date_string,...
   c. Add a new PHP_FUNCTION(date_interval_add) after the function 
      PHP_FUNCTION(date_interval_format) that takes two DateInterval 
      objects, extract the timelib_rel_time information, call the new 
      function that you've added in step 1, and replace the 
      timelib_rel_time* that is part of the DateInterval object with the 
      returned value.
   d. Add a forwards declaration to php_date.h after 
      PHP_FUNCTION(date_interval_create_from_date_string);

4. Make sure that the function can be called both as a procedural way 
   (date_interval_add) and an object oriented way (DateInterval->add()).

5. Write test cases and put them in ext/date/tests.

That's what I can think off right now.

cheers,
Derick



-- 
http://derickrethans.nl | http://xdebug.org
Like Xdebug? Consider a donation: http://xdebug.org/donate.php
twitter: @derickr and @xdebug
Posted with an email client that doesn't mangle email: alpine

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to