1. 程式人生 > 程式設計 >例項化php類時傳參的方法分析

例項化php類時傳參的方法分析

本文例項講述了例項化php類時傳參的方法。分享給大家供大家參考,具體如下:

當我們例項化一個php類的時候,要怎麼傳遞引數呢?這取決於該類的構造方法。

例:

person.class.php

<?php
    class person{
        var $name;
        var $color;
        var $sex;
        var $age;
        function __construct($name,$age='',$sex='boy'){
            $this->name = $name;
            $this->age = $age;
            $this->sex = $sex;
            $this->color = 'yello';
        }
        function eat(){
            echo $this->name.'要吃飯';
        }
        function xinxi(){
            echo $this->name.' is '.$this->sex.' and age is '.$this->age.' fuse is '.$this->color;
        }
        function zuoyong(){
          //類似於這樣的內部呼叫,相當於把eat()的程式碼引入到zuoyong()裡面,而不是跳轉到eat()裡面繼續執行
            //如果是http://localhost/zuoyong?food=xigua這樣的url來呼叫zuoyong()
            //那麼eat()中可直接通過$_GET['food']獲取url引數,因為全域性變數可在函式內部使用
            $this->eat();
        }
    }
?>

son.php

<?php
    include('person.class.php');
    $son = new person('cuihua',25,'girl');//此處的引數傳遞要和類的構造方法裡面的引數順序對應
    //$son->xinxi();//cuihua is girl and age is 25 fuse is yello
    $son->name = '田妞';
    $son->eat();//田妞要吃飯
?>

注:php類的屬性($name、$age等)可以在該類的全域性範圍內使用,可以把類的屬性視為“該類的”全域性變數。但是當外部程式重新呼叫這個類中的方法時,該類會重新被例項化,也就是說要再次執行構造方法,那麼上一次給$name等屬性賦的值就會被清空,所以$name等屬性的值不會像常量或是session中的值那樣一直保持下去。

son2.php

<?php
    include('person.class.php');
    $son = new person('cuihua','girl');
    $son2 = $son;
    $son2->name = '田妞';
    $son->eat();//田妞要吃飯
?>

當我把$son物件賦予$sin2之後,改變了$son2的name引數,此時發現$son的name引數也響應的跟著改變,由此可見:在php5中,把物件賦值給變數,是按引用傳遞物件,而不是進行值傳遞,此時並不會建立$son的副本。傳遞物件到函式,或從方法返回物件,是引用傳遞還是值傳遞,待驗證。

可以通過var_dump()列印物件,不過只能列印物件的屬性,它的方法不能打印出來,要想獲取物件的方法列表,可以用get_class_methods函式。

<?php
$son = new person('cuihua','girl');
var_dump($son);
/*
object(person)[1]
 public 'name' => string 'cuihua' (length=6)
 public 'color' => string 'yello' (length=5)
 public 'sex' => string 'girl' (length=4)
 public 'age' => int 25
*/
 
$mon = get_class_methods($son);
var_dump($mon);
/*
array (size=4)
 0 => string '__construct' (length=11)
 1 => string 'eat' (length=3)
 2 => string 'xinxi' (length=5)
 3 => string 'zuoyong' (length=7)
*/
?>

更多關於PHP相關內容感興趣的讀者可檢視本站專題:《php面向物件程式設計入門教程》、《PHP陣列(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算子用法總結》、《php字串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧彙總》

希望本文所述對大家PHP程式設計有所幫助。