aardio 文档
aardio 范例:语法比较
//语法比较
import php;
import console;
php.print = function( msg ) {
console.log("echo:", msg)
}
//PHP代码
phpcode =/***
//echo语句类似aardio中的 io.print
echo "PHP的注释语法与aardio一样,语句也以分号结束,并且分号不能象aardio那样省略\n";
echo 'PHP 中的所有变量必须以 $ 符号开始。 $号是变量的修饰前缀,但不是变量名称的一部分';
echo "在PHP中函数内部变量默认为局部变量(这与aardio,Javascript正好相反),使用 global 语句引入或声明全局变量\n";
global $g; //定义全局变量
$abc = 123; //定义局部变量
$str = "hello"." World"; //PHP连接字符串使用圆点,类似aardio中的 ++ 操作符
/*
PHP单引号中是纯文本,类似 \n 这样的转义符不起作用,
而双引号中可以使用转义符,aardio中也有类似的机制,不过规则正好相反,
aardio中双引号中才是普通文本,单引号中支持转义符
*/
echo 'PHP单引号中是纯文本,不支持转义符,也不能直接写变量 a\nb';
echo "PHP双引号内可以直接写变量名 $str";
/*
创建关键数组,类似aardio中的表:
var arr = { a = 123; b = "字符串"}
其他编程语言多使用逗号分隔数组成员,
但aardio使用分号分隔表成员。
*/
$arr = array(
//注意键名放在字符串中,aardio中等价的写法是{ a = 123;} 或 { ["a"] = 123 }
"a" => 123,
"b" => "字符串"
);
/*
遍历数组,在aardio中等价的语句是:
for(k,v in arr){
io.print("a[" + k + "] = " + v )
}
aardio的迭代语句是 for( 成员变量名 in 数组名 ){ }
而PHP的迭代语句是 for( 数组名 as 成员变量名 ){ }
*/
foreach ($arr as $k => $v) {
echo "\$a[$k] => $v.\n"; //PHP双引号中的字符串可以直接使用变量
}
//访问数组成员类似aardio的索引语法,但PHP不支持 arr.b 这样的写法
echo $arr["b"];
/*
explode()函数使用参数1指定的分隔符拆分字符串并返回数组。
aardio中等价的代码为
var arr = string.split("a,b,c,d",",")
*/
$arr = explode(",","a,b,c,d");
foreach ($arr as $k => $v) {
echo "\$a[$k] => $v.\n"; //PHP双引号中的字符串可以直接使用变量
}
/*
PHP早期不支持名字空间,数组函数多以 array为前缀
而aardio中数组相关函数都在table名字空间下。
例如数组替入,在aardio中使用 table.splice() 函数
在PHP中使用 array_splice() 函数,用法大同小异。
array_splice() 替入的是一个数组,而 table.splice() 替入不定个数的参数
*/
array_splice($arr,2,1,array("d","e") );
foreach ($arr as $k => $v) {
echo "array_splice \$a[$k] => $v.\n"; //PHP双引号中的字符串可以直接使用变量
}
/*
PHP里创建类
aardio里不同的是:
1. 类成员必须写成键值对格式,函数也一样,例如 member_func = function(){ };
2. 私有成员必须写在构造函数里用var语句声明为类作用域局部变量,PHP里的var语句则是公开成员,语义相反
*/
class Cart{
//定义成员变量,
/*
PHP里var可不是定义局部变量的意思。
PHP5里var实际上是public的别名,一般使用public.
而在aardio里类的所有成员变量默认就是公开的,也就是public的.
aardio里没有public等价的关键字,与javascript类似,aardio中使用var语句声明局部变量。
在类的构造函数中用var语句就可以声明类作用域有效的私有成员。所以var在aardio中的用意与PHP恰恰相反
*/
var $items = 123; // 新的写法一般应改用public
/*
static定义静态成员变量,静态变量被类所有实例对象共享。
在类外部访问静态成员的语法: 类名::静态成员变量
类内部访问静态成员的语法: self::静态成员变量
aardio对应的是类的名字空间,用self表示。
在aardio里,变量的默认名字空间就是类的名字空间。
也就是默认的变量就是静态变量,所以在类内部写 self.变量名 与直接写变量名是等价的。
PHP用self表示类,用$this表示类当前创建的实例对象。
这与aardio的这两个关键字语义类似,self表示类(在aardio中也即名字空间),this表示当前创建的实例对象。
不过aardio的成员操作符都是使用圆点,
PHP的 self::静态变量名 在aardio中可以写 self.静态变量名
PHP的 $this->实例变量名 在aardio中可以写 this.实例变量名
*/
static $s_num = 456;
/*
PHP使用const定义常量(一般大写),
在类外部一般使用 类名::常量 的方式访问(类似静态变量)
aardio则在成员变量前加一个加划线表示成员常量。
类的名字空间、类的实例都可以使用这种常量。
例如 self._const_name this._const_name 等等。
aardio的常量如果大写,表示全局有效的常量,
例如 _CONST_NAME
在很多语言中通常习惯性的为常量加上下划线前缀、全局常量通常大写,
但这仅仅是书写习惯,而在aardio中这个书写方式变成了定义常量的语法。
*/
const CHARSET = "abc";
// 把 $num 个 $artnr 放入车中
function add_item ($artnr, $num){
$this->items[$artnr] += $num;
}
// 把 $num 个 $artnr 从车中取出
function remove_item ($artnr, $num){
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num;
return true;
} else {
return false;
}
}
}
/*
创建类对象实例
等价的aardio代码如下:
var a = Cart() // aardio创建类实例不需要使用 new关键字
io.print( a.items )
PHP访问对象成员不是使用圆点,而是使用C指针操作符 ->
因为圆点已经被用作字符串连接符了,以致于PHP新增的名字空间要用斜杠表示。
PHP无论是语法、还是函数命名都略有些混乱,这是PHP的一个遗憾。
*/
$a = new Cart;
echo $a->items;//注意这里items前面不能再加$符号
echo Cart::CHARSET;
$str = <<<EOT
php中heredoc语法很象aardio中用块注释表示字符串的语法,
str = /**
这是aardio类似heredoc的语法
**/
不同的是,aardio匹配块注释首尾标记的星号数目来确定边界。
而PHP则在<<<符号后面指定结束标记。
结束标记一定要放在单独的一行,后面必须有分号,这一行不能有缩进,不能有空格。
所以heredoc的语法非常严格,相对来说aardio的语法要简洁直观一些
heredoc中也可以直接置入PHP变量,例如: $a->items
EOT;
***/
console.open();
//运行PHP代码,返回表达式的值
php.exec( phpcode );
console.log( php.str ); //取php变量,注意不要写美元符号前缀
console.pause();
Markdown 格式