#fun with typecasts

- `!!$foo` will turn any truthy value to `true` (or `1` in output), falsy values (0, empty string, empty array) to `false` (or empty output)  
This will rarely be needed in code golf, for in most cases where you need a boolean, there is an implicit cast anyway.

- `(int)$foo` can be written as `$foo|0` or `foo^0`, but may need parentheses.  
For booleans and strings, `$foo*1` or `+$foo` can be used to cast to int.
- Unlike most other languages, PHP handles strings with numeric values as numbers. So if you have any string that contains a number you have to calculate with, just calculate.
- The other way works as well: To multiply any number in a variable with `10`, you can append a zero: `*10` -> `.0` saves one byte and has almost the same precedence.  
This does _not_ work on any parenthesized expressions, function calls included.
- To turn an array into a string, use `join` instead of `implode`.  
If you don´t need a delimiter, don´t use it: `join($a)` does the same as `join('',$a)`
- Incrementing strings: The most amazing feature imo is that `$s=a;$s++;` produces `$s=b;`. This works with uppercase and lowercase characters. `$s=Z;$s++;` results in `$s=AA;`.  
This also works with mixed case: `aZ` to `bA`, `A1` to `A2`, `A9` to `B0` and `z99Z` to `aa00A`.  
Decrement does _not_ work on strings. (And it does not on `NULL`).  
Back in PHP 3, `$n="001";$n++;` produced `$n="002";`. I am a little sad they removed that.

Whatever you golf: **always have the [operator precedence table](http://php.net/manual/language.operators.precedence.php) at hand.**