文章会有【原创】或者【转载】标示,部分来自Google Baidu的学习结果 {Java/PHP/Python/Ruby/Go}

PHP Ruby 的一些学习比较  


PHP 变量、常量
变量:$var = "1000";
常量:define("ROOT","/tmp");
类常量:const aaa = 10;
类变量:同样还是$xxx;
全局变量: global $xxx; $GLOBALS['xxxx']

Ruby 变量、常量
变量:aa = 10 或者 _a = 10 小写字母或者下划线开头
常量:Ma = 10
实例变量:@hello = 10
类变量:@@t = 20
全局变量:$aa = 10

PHP基本的类实例化
<?php
class demo {
 function __construct($name) {
  $this -> name = $name;
 }
 function say() {
  echo $this -> name;
 }
 function __destruct() {
 }
}
$p = new demo("yang");
$p -> say();

Ruby基本的类实例化
class Hello
 def initialize( name )
  @name = name
 end
 # php function __construct

 def hello_rb
  puts "hello"+@name
 end

end
hi = Hello.new("phper.yang")
hi.hello_rb

PHP类的简单继承
class my {
 function say() {
  echo "hello ";
 }
}

class hhy extends my {
 function yang() {
  echo "yang";
 }
}
$p = new hhy();
$p -> say();
$p -> yang();

Ruby类的简单继承
class Hello
  def t1
     yang = "hello ruby"
     puts yang
  end
end

class Newhello < Hello
   def t2
      yphp = "hello php"
      puts yphp
   end
end

p = Newhello.new
p.t1
p.t2

ruby 的类名首字母必须大写


--------------------------------------

php 中不分的很清楚关联数组和索引数组
<?php
    $a = array("php","ruby","python");
    $aa = array("one" => "php","two" => "ruby","three" => "python");

ruby 中普通数组是
a = ['php','ruby','python']
哈希是
a = {'one' => 'php','two' => 'ruby','three' => 'python'}
a = {:one => 'php',:two => 'ruby',:three => 'python'}

ruby 只有nil 或者false 是真的false
slef 是表示当前对象

__FILE__和PHP中一样表示执行的文件名
__LINE__和PHP一样表示代码执行的行数
__ENCODING__ ruby1.9 指定了当前文件的编码

ruby 中变量要初始化。否则会有一个错误。

ruby 不支持++ 和 --的符号。

php 操作数组的方法
<?php
     $aa = array("one" => "php","two" => "ruby","three" => "python");
     foreach($aa as $key => $val) {
         echo $key ." => ".$val;
     }

ruby 操作数组和哈希的方法

a = ['php','ruby','python']
for lang in a
   puts lang
end

#####
哈希的两种写法。数组啦就是
#####
aa ={:one => "php",:two => "ruby",:three => "python"}
for k,v in aa
   puts "#{k} => #{v}"
end

aa.each do |k, v|
   puts "#{k} => #{v}"
end

3.times { puts "yang"} #yang yang yang
4.upto(6) { |x| print x} #456
(1..8).each { |x| print x } #12345678
[1,2,3,4,5].each  { |x| print x } #12345

[1,2,3].collect { |x| x*x} #1,4,9
(1..10).select { |x| x%2 == 0} #2,4,6,8,10
(1..10).reject { |x| x%2 == 0} #1,3,5,7,9

--------------------------------------------------

ruby 简单类

class Point
end

实例化

p = Point.new

class Point
    def initialize(x,y)
      @x,@y = x,y
    end
end

p = Point.new(0,0)

to_s 任何自定义类返回实例方法

class Point
   def initialize(x,y)
     @x,@y = x,y
   end

   def to_s
     "(#@x,#@y)"
   end
end

p = new Point(1,2)
puts p # (1,2)

class Point
    def initialize(x,y)
       @x = x
       @y = y
    end
   
    def x
       @x
    end

    def y
       @y
    end

    def to_s
       "#@x,#@y"
    end
end

p = Point.new(1,2)
puts p
p = Point.new(p.x*2,p.y*3) #p.x or p.y 像是引用变量
puts p


class Point
   def initialize(x,y)
      @x = x
      @y = y
   end
   def x
      @x
   end
   def y
      @y
   end
   def x=(value)  #类似于PHP的__set 私有属性 __get取值
      @x = value
   end
   def y=(value)  #类似于PHP的__set 私有属性
      @y = value
   end
   def to_s
      "#@x---#@y"
   end
end
p = Point.new(2,3)
puts p
p.x = 1000
p.y = 2000
puts p
#2---3
#1000---2000

attr attr_accessor attr_reader 元编程?

public private protected 和 PHP 的话不定义属性 默认为 public 。

ruby的initialize 是默认为private

php的__construct 模式是什么类型public


-----------------------------------------------------

元编程