//normal array
var arr = [1, 2, 3, 4, 5];
//loop and print
arr.forEach((value: number) => {
echo('My value: ' + value + '\n');
});
//compile-time-only class
interface SampleContract extends Pct.CompileTimeOnly {
requiredProperty: string;
optionalProperty?: bool;
}
//function using compile-time class
function printInfo(info: SampleContract) {
echo('Required: ' + info.requiredProperty + '\n');
if (typeof info.optionalProperty !== 'undefined') {
echo('Optional: ' + info.optionalProperty + '\n');
}
}
//type inferred matching
printInfo({ requiredProperty: 'required val' });
//will be converted to double quotes
var a = 'My\nNewline\nString$escaped{$interpolation}';
//concatenation
var b = 99 + ' bottles of beer on the wall';
//compiler warning because type is any
var c: any = 'test string';
var d = 12 + c;
//common JS functions
var_dump(b.length);
var_dump(b.charAt(0));
var_dump(b.split(' '));
//regular array
var a = [1, 2, 3];
//some calls
a.forEach((value: number) => {
var_dump(value);
});
a.push(4);
//associative array
var b = Pct.newAssocArray({
prop: 'propValue',
prop2: ['a', 'b', 'c'],
closure: function () { echo('Hey!\n'); }
});
//some calls
var c = b.map((value: any) => {
return gettype(value);
});
c['prop3'] = 15;
var_dump(c.length);
function printNumber(value: number) {
echo('Number: ' + value + '\n');
}
//compile-time cast only
printNumber(<number><any>'10');
//runtime PHP function cast
printNumber(intval('10'));
//runtime PHP explicit cast
printNumber(Pct.castInt('10'));
//two ways to check a FALSE return
if (<bool><any>strpos('team', 'I') === false) {
echo('There is no "I" in "team"\n');
}
if (Pct.isFalse(strpos('team', 'I'))) {
echo('There is no "I" in "team"\n');
}
//assign
var a = 'hey';
var b = Pct.byRef(a);
//pass
function addWord($val: string) {
$val += ' word';
}
addWord(b);
echo('Changed? ' + (a == 'hey word'));
//return
var c = { d: 15 };
function $getReference(val: { d: number; }) {
return val.d;
}
var e = Pct.byRef($getReference(c));
e = 20;
echo('Changed? ' + (c.d == 20));
function myprint(one: string, ...args: any[]) {
echo('First: ' + arguments[0] + '\n');
echo('Last: ' + arguments[arguments.length - 1] + '\n');
if (args.length > 0) {
echo('First args: ' + args[0] + '\n');
echo('Last args: ' + args[args.length - 1] + '\n');
}
}
myprint('foo', true, 13.5, 'bar');
function words(prefix?: bool, file = file('default.txt')) {
file.forEach((line: string) => {
line.split(' ').forEach((word: string) => {
if (prefix) echo('Word: ');
echo(word + '\n');
});
});
}
//reads default.txt and prints w/out prefix
words();
//uses array and prints w/ prefix
words(true, ['foo bar', 'fu bar']);
function func() {
var anonFunc = (value: string) => { echo(value); }
var anonFunc2 = function (value: string) { echo(value); }
function nestedFunc(value: string) { echo(value); }
}
//simple
try {
new ReflectionClass('NonExistentClass');
} catch (err) {
if (err instanceof ReflectionException) {
echo('Not found: ' + (<Exception>err).getMessage());
} else {
echo('Other: ' + (<Exception>err).getMessage());
}
} finally {
echo('This runs always in PHP 5.5');
}
//advanced
Pct.try({
try: () => {
new ReflectionClass('NonExistentClass');
},
catch: [
(err: ReflectionException) => {
echo('Not found: ' + err.getMessage());
},
(err: Exception) => {
echo('Other: ' + err.getMessage());
}
],
finally: () => {
echo('This runs always in PHP 5.5');
}
});
interface Iface {
numberProperty: number;
write(param: string);
notRequired?(...params: any[]): bool;
}
class BaseClass {
static fileContents = file_get_contents('myfile.txt');
constructor(public numberProperty: number) {
echo('Constructed!')
}
}
class MyClass extends BaseClass implements Iface {
static getFileContents() {
return BaseClass.fileContents;
}
constructor() {
super(12);
}
__destruct() { echo('Destructing!\n'); }
private secretFunction() { echo('Hello\n'); }
write(param: string) {
echo('Value: ' + param + '\n');
}
__invoke(someVal: any) {
echo('I have been invoked!\n');
return this.numberProperty + Pct.castInt(someVal);
}
__get(prop: string) { return 42; }
__set(prop: string, value: any) {
echo('Setting ' + prop + ' with ' + value);
}
toString() { return 'MyClass'; }
}
var myClass = new MyClass();
echo('Instance? ' + (myClass instanceof Iface) + '\n');
//call static
var a = MyClass.getFileContents();
//call normal
myClass.write('Hey');
//invoke
var b = myClass.__invoke(20);
var c = myClass.__invoke('15');
//trigger getter/setter
var d = <number>(<any>myClass).someProp;
(<any>myClass).someNewProp = 20;
//string version
var e = myClass.toString();
interface Place extends Pct.CompileTimeOnly {
zip: string;
city?: string;
}
interface Weather extends Pct.CompileTimeOnly {
place: Place;
temperature: number;
}
function printWeather(weather: Weather) {
echo('It is ' + weather.temperature + ' in ');
if (property_exists(weather.place, 'city')) {
echo(weather.place.city);
} else echo(weather.place.zip);
}
printWeather({
place: {
zip: '75001',
city: 'Addison'
},
temperature: 85
});
printWeather({
place: {zip: '76020'},
temperature: 88
});
module MyModule {
export interface MyIface {
}
export module Sub {
export class MyClass implements MyModule.MyIface {
causeErr() {
throw new Exception('Error');
}
}
}
}
import Sub = MyModule.Sub;
var a = new Sub.MyClass();
a.causeErr();