This is the XP Framework's development checkout.
If you just want to use the XP Framework, grab a release using composer require xp-framework/core
. If you wish to use this development checkout, clone this repository instead.
The entry point for software written in the XP Framework is not the PHP interpreter's CLI / web server API but either a command line runner or a specialized web entry point. These runners can be installed by using the following one-liner:
$ cd ~/bin
$ curl -sSL https://baltocdn.com/xp-framework/xp-runners/distribution/downloads/i/installer/setup-8.8.0.sh | sh
To use the the XP Framework development checkout, put the following in your ~/bin/xp.ini
file:
use=/path/to/xp/core
Finally, start xp -v
to see it working:
$ xp -v
XP 12.1.1-dev { PHP/8.3.10 & Zend/4.3.10 } @ Windows NT SURFACE 10.0 build 22631 (Windows 11) AMD64
Copyright (c) 2001-2024 the XP group
FileSystemCL<./src/main/php>
FileSystemCL<./src/test/php>
FileSystemCL<./src/main/resources>
FileSystemCL<./src/test/resources>
FileSystemCL<.>
The XP Framework runs scripts or classes.
Save the following sourcecode to a file called ageindays.script.php
:
<?php namespace examples;
use util\{Date, Dates};
use util\cmd\Console;
$span= Dates::diff(new Date($argv[1]), Date::now());
Console::writeLine('Hey, you are ', $span->getDays(), ' days old');
Now run it:
$ xp ageindays.script.php 1977-12-14
Hey, you are 16015 days old
Alternatively, you can put this code inside a class and give it a static main method. This way, you can use features like inheritance, trait inclusion etcetera. This time, save the code to a file called AgeInDays.class.php
.
<?php
use util\{Date, Dates};
use util\cmd\Console;
class AgeInDays {
public static function main(array $args): int {
$span= Dates::diff(new Date($args[0]), Date::now());
Console::writeLine('Hey, you are ', $span->getDays(), ' days old');
return 0;
}
}
Note the arguments have shifted by one: If you want the class' name, simply use self::class
!
$ xp AgeInDays 1977-12-14
Hey, you are 16015 days old
To contribute, use the GitHub way - fork, hack, and submit a pull request!
Enjoy!