You get a notice because PHP doesn't treat functions as first class objects.
When you do this
$functions = array(t1, t2);
The PHP engine sees t1, and t2, and tries to resolve it as a constant, but because it cannot find a constant named t1/t2, it "assumes" that you wanted to type array('t1', 't2');
If you do a var_dump($functions), you can see that the items in the array are strings.
When you try to call a string as a function, like
$functions[0]()
PHP will look for a function with the same name as the string. I wouldn't call this as using a string as a function pointer, this is more like using reflection. PHP calls it "variable functions", see:
http://hu2.php.net/manual/en/functions.variable-functions.php
So, the correct way to get rid of the notices is:
$functions = array('t1', 't2');
About why does
't1'();
not work? Unfortunately there is no answer. It's PHP, there are a good number of these annoying as hell quirks. It's the same quirk as:
explode(':', 'one:two:three')[0];
Parse error: syntax error, unexpected '[' in php shell code on line 1