TRANSFORMING PHP

Hi, I'm Chris

How to make

your own syntax

in PHP

I've called this

Transforming PHP

because...

How many of

you started in

other languages?

"I wish I could use

this syntax

in my projects..."

You have a few options

Submit to the

the core

→ Write an RFC

→ Write an RFC

 Make a patch

→ Write an RFC

 Make a patch

 Hope it's popular

Make your own compiler

→ Make a specification

→ Make a specification

Tokenise a string

→ Make a specification

Tokenise a string

Parse some tokens

→ Make a specification

Tokenise a string

Parse some tokens

→ Execute or translate

github.com/preprocess/pre-phpx

github.com/preprocess/pre-phpx-example

sitepoint.com/reactjs-php-writing-compilers-easy-fun

Use a compiler generator

→ Make a specification

Tokenise a string

Parse some tokens

→ Execute or translate

Use language macros

"PHP doesn't have
language macros..."

"PHP doesn't didn't have
language macros..."

Meet YAY

github.com/marcioAlmada/yay

Tokenises a string

Matches a series of tokens

Replaces matched tokens

with your code

Good because:

you don't have to

submit to core

Good because:

you don't have to

rebuild the compiler

Good because:

you don't have to

install an extension

Integration is

the problem...

Meet Pre

preprocess.io

Pre\Plugin\process("path/to/macros.yay");
MyClass.php → MyClass.pre

(PSR-4 only)

Some pre-built macros...

Short closures

Async/await

Class accessors

Collections

Good for:

testing future syntax

Good for:

refactoring your app

Bad because:

poor tooling

Bad because:

sparse documentation

Bad because:

no specification

It's getting better

all the time!

Thanks

 

preprocess.io

 

twitter.com/assertchris

slides.com/assertchris

Bonus round:

→ deferred

→ immutable classes

→ optional catch type

→ parameter loaders

→ property loaders

→ trailing commas