Php/php oop classes objects

来自菜鸟教程
机器人讨论 | 贡献2020年11月12日 (四) 08:45的版本 (机器人:添加分类Php基础教程
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至:导航、​搜索

PHP OOP-类和对象

类是对象的模板,而对象是类的实例。

OOP案例

假设我们有一个名为Fruit的类。水果可以具有名称,颜色,重量等属性。我们可以定义变量$ name,$ color和$ weight来保存这些属性的值。

创建单个对象(苹果,香蕉等)后,它们将从类继承所有属性和行为,但是每个对象的属性值都不同。

定义一个班级

通过使用 class 关键字,后跟类的名称和一对花括号({})。它的所有属性和方法都放在花括号内:

句法

    <?php
class Fruit {
  // code goes here...
}
?>

下面我们声明一个名为Fruit的类,该类由两个属性($ name和$ color)以及两个用于设置和获取$ name属性的方法set_name()和get_name()组成:

    <?php
class Fruit {
  // Properties
  public 
    $name;
  public $color;

  // Methods
  function 
    set_name($name) {
    
    $this->name = $name;
  }
  function get_name() {
    
    return $this->name;
  }
}
?>

注意: 在类中,变量称为属性,函数称为方法!


定义对象

没有对象,什么都不是!我们可以从一个类创建多个对象。每个对象都具有该类中定义的所有属性和方法,但是它们将具有不同的属性值。

类的对象是使用 new 关键词。

在下面的示例中,$ apple和$ banana是Fruit类的实例:

    <?php
class Fruit {
  // Properties
  public 
    $name;
  public $color;

  // Methods
  function 
    set_name($name) {
    
    $this->name = $name;
  }
  function get_name() {
    
    return $this->name;
  }
}

$apple = new Fruit();

    $banana = new Fruit();
$apple->set_name('Apple');
$banana->set_name('Banana');


echo $apple->get_name();
echo "<br>";

    echo $banana->get_name();
?>

在下面的示例中,我们为Fruit类添加了两个方法,用于设置和获取$ color属性:

    <?php
class Fruit {
  // Properties
  public $name;
  
    public $color;

  // Methods
  
    function set_name($name) {
    $this->name = $name;
  }
  
    function get_name() {
    return $this->name;
  }
  
    function set_color($color) {
    $this->color = $color;
  }
  
    function get_color() {
    return $this->color;
  }

    }

$apple = new Fruit();
$apple->set_name('Apple');

    $apple->set_color('Red');
echo "Name: " . $apple->get_name();
echo "<br>";

    echo "Color: " . $apple->get_color();
?>

PHP-$ this关键字

$ this关键字引用当前对象,并且仅在方法内部可用。

请看以下示例:

    <?php
class Fruit {
  public $name;
}
$apple = new Fruit();
?>

因此,在哪里可以更改$ name属性的值?有两种方法:

1.在类内部(通过添加set_name()方法并使用$ this):

    <?php
class Fruit {
  public $name;
  
    function set_name($name) {
    $this->name = $name;
  
    }
}
$apple = new Fruit();
$apple->set_name("Apple");
?>

2.在类之外(通过直接更改属性值):

    <?php
class Fruit {
  public $name;
}
$apple = new Fruit();
$apple->name = "Apple";
?>

PHP-instanceof

你可以使用 instanceof 检查对象是否属于特定类的关键字:

    <?php
$apple = new Fruit();
var_dump($apple instanceof 
    Fruit);
?>