- Output for git.master, git.master_jit, rfc.property-hooks
- I am using the following XPath expression to select table cells from the first row of the first table, by combining the results for <th> and <td>. This works fine, I get both cells back. Note that the first table combines <th> and <td> in a single row. (((descendant-or-self::html/descendant-or-self::table)[1]//tr)[1]/td|((descendant-or-self::html/descendant-or-self::table)[1]//tr)[1]/th) 2 results: <th>Cell 1</th> <td>Cell 2</td> When I try to get the first cell by appending [1] to the expression I get the second cell back instead of the first. Why? The expected result of this expression is '<th>Cell 1</th>' (((descendant-or-self::html/descendant-or-self::table)[1]//tr)[1]/td|((descendant-or-self::html/descendant-or-self::table)[1]//tr)[1]/th)[1] 1 result: <td>Cell 2</td> Appending [2] yields the second cell successfully. But why not the first? (((descendant-or-self::html/descendant-or-self::table)[1]//tr)[1]/td|((descendant-or-self::html/descendant-or-self::table)[1]//tr)[1]/th)[2] 1 result: <td>Cell 2</td> Similarly, for the second table I can get all cells with this expression. The second table only contains <th> cells in the first row. (((descendant-or-self::html/descendant-or-self::table)[2]//tr)[1]/td|((descendant-or-self::html/descendant-or-self::table)[2]//tr)[1]/th) 2 results: <th>Cell 1</th> <th>Cell 2</th> However, when I append [1] to get only the first cell back, I get an empty result. The expected result for this expression is '<th>Cell 1</th>' (((descendant-or-self::html/descendant-or-self::table)[2]//tr)[1]/td|((descendant-or-self::html/descendant-or-self::table)[2]//tr)[1]/th)[1] 0 results The second cell can be retrieved successfully by appending [2]. But why not the first? (((descendant-or-self::html/descendant-or-self::table)[2]//tr)[1]/td|((descendant-or-self::html/descendant-or-self::table)[2]//tr)[1]/th)[2] 1 result: <th>Cell 2</th> Note that by replacing the first 'descendant-or-self' with '//' the expression seems to work as expected in all cases for both the first and second table: (((//html/descendant-or-self::table)[1]//tr)[1]/td|((//html/descendant-or-self::table)[1]//tr)[1]/th) 2 results: <th>Cell 1</th> <td>Cell 2</td> (((//html/descendant-or-self::table)[1]//tr)[1]/td|((//html/descendant-or-self::table)[1]//tr)[1]/th)[1] 1 result: <th>Cell 1</th> (((//html/descendant-or-self::table)[1]//tr)[1]/td|((//html/descendant-or-self::table)[1]//tr)[1]/th)[2] 1 result: <td>Cell 2</td> (((//html/descendant-or-self::table)[2]//tr)[1]/td|((//html/descendant-or-self::table)[2]//tr)[1]/th) 2 results: <th>Cell 1</th> <th>Cell 2</th> (((//html/descendant-or-self::table)[2]//tr)[1]/td|((//html/descendant-or-self::table)[2]//tr)[1]/th)[1] 1 result: <th>Cell 1</th> (((//html/descendant-or-self::table)[2]//tr)[1]/td|((//html/descendant-or-self::table)[2]//tr)[1]/th)[2] 1 result: <th>Cell 2</th>
This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.
Active branches
Archived branches
Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page
- 2020-03-21 RFC: Is_Literal - declined
- 2020-12-04 Enumerations - included in PHP 8.1
- 2018-06-15 Typed Properties v2 - implemented in PHP 7.4
- 2016-08-12 Object typehint - included in PHP 7.2
- 2016-08-14 Arrow functions - withdrawn
- 2016-05-29 array_change_keys() - withdrawn
- 2016-04-19 Lexical scope support for anonymous classes - suspended
- 2016-04-17 Functional Interfaces - declined
- 2016-03-16 Typed Properties - superseded in favor of Typed Properties 2.0
- 2015-08-27 Callable Prototypes - declined
- 2015-05-01 Short Closures - declined / withdrawn in favor of Arrow Functions
- 2015-02-18 Scalar type hints v5 - included in PHP 7
- 2015-02-14 Union Types - declined
- 2013-09-22 Anonymous classes - included in PHP 7