<?php

$var = ts_var_declare(null);
$var1 = ts_var_declare(1);
$var2 = ts_var_declare(2);

var_dump(ts_var_get_or_set($var1, 1, function() {
	echo 'call: ', __LINE__, PHP_EOL;
	return __LINE__;
}, 1));

var_dump(ts_var_get($var));

echo PHP_EOL;

var_dump(ts_var_get_or_set($var1, 'a', function() {
	echo 'call: ', __LINE__, PHP_EOL;
	return __LINE__;
}, 1));

var_dump(ts_var_get($var));

echo PHP_EOL;

var_dump(ts_var_get_or_set($var2, 1, function() use(&$var1) {
	echo 'call: ', __LINE__, PHP_EOL;
	return ts_var_get($var1);
}, 1));

var_dump(ts_var_get($var));

echo PHP_EOL;

var_dump(ts_var_get_or_set($var2, 1, function() use(&$var1) {
	echo 'call: ', __LINE__, PHP_EOL;
	return ts_var_get($var1);
}, 1));

var_dump(ts_var_get($var));

echo PHP_EOL;

var_dump(ts_var_get_or_set($var2, 'a', function() use(&$var2) {
	echo 'call: ', __LINE__, PHP_EOL;
	return ts_var_get($var2);
}, 1));

var_dump(ts_var_get($var));

echo PHP_EOL;

var_dump(ts_var_get_or_set($var2, 'a', function() use(&$var2) {
	echo 'call: ', __LINE__, PHP_EOL;
	return ts_var_get($var2);
}, 1));

var_dump(ts_var_get($var));

echo PHP_EOL;

var_dump(ts_var_get_or_set($var2, 'b', function() use(&$var2) {
	echo 'call: ', __LINE__, PHP_EOL;
	return ts_var_set($var2, 'c', true);
}, 1));

var_dump(ts_var_get($var));