XHP
Original author(s) | Marcel Laverdet |
---|---|
Developer(s) | |
Initial release | February 2010 |
Stable release | 2.2.2 / July 14, 2015[1] |
Development status | Active |
Written in | PHP, Hack |
Platform | Cross-platform |
Type | PHP Library |
License | BSD License |
Website |
facebook |
XHP is an augmentation of PHP and Hack developed at Facebook to allow XML syntax for the purpose of creating custom and reusable HTML elements. It is available as an open-source software GitHub project and as a Homebrew module for PHP 5.3, 5.4, and 5.5. Facebook have also developed a similar augmentation for JavaScript, namely JSX.
Origins
XHP was loosely inspired by ECMAScript for XML[2] and created by Marcel Laverdet. It was first developed for Facebook Lite as a new UI rendering layer but was later ported over to Facebook's www and mobile web stack as well as incorporated into HipHop for PHP. It was made available to the public in February 2010 and now accounts for nearly all of Facebook's server-side generated HTML over all of its properties.
Benefits
XHP offers a much cleaner interface to UI programming when outputting HTML in PHP, but has some engineering advantages as well.
- Parse-time validation of HTML syntax
- XHP validates the syntax and structure of the entire document tree on render and will throw an exception if an element was not closed properly, has invalid children, has an invalid attribute, or is missing required children or attributes.
- Automatic XSS protection
- Because all rendering to the page is done inside XHP, and it knows what is HTML and what is content, XHP escapes all content without any special effort from the programmer.
- Object mutation
- XHP objects are stored as standard PHP objects, so they can be manipulated through a DOM-like API, which includes methods such as
setAttribute()
,getAttribute()
,appendChild()
, and several others prior to or during render. - Custom HTML
- Instead of writing functions to generate HTML, or switching in and out of PHP, custom XHP elements can defined and mixed in with standard HTML elements that will abstract out common HTML structures.
See also
References
External links
- Official website
- xhp-lib on GitHub
- Code Before the Horse - Information on installation, uses, and best practices of XHP
- Facebook's XHP Announcement