web-dev-qa-db-ja.com

PHPクラスでは、関数内にプライベート変数を作成することは可能ですか?

PHPクラスを使用する際に、関数内の変数を_$this->variablename_の方法でそのクラスのプロパティとして定義すると、クラス内で自動的にそのパブリック変数になることに気付きました。クラス。

_class example {
    public function setstring() {
        $this->string = "string";
    }
}
_

そのため

_$class = new example();
echo $class->string; 
_

出力:string

ただし、クラス内の関数にのみアクセスできるプライベート変数を作成したい場合、setstring()関数内でのみ宣言する方法はありますか?このような関数の外でそれらをプライベートとして宣言する代わりに。

_class example {
    private $string ='';
    public function setstring() {
        $this->string = "string";
    }
}
_

誰かがこれを行う理由は、クラスの開始時に宣言されたプライベート変数の長いリストを持たないようにするためです。

7

いいえ、それを行う方法はありません。

PHPでは、通常、関数の上にクラス/インスタンスプロパティをアルファベット順にall宣言し、自己文書化コメントを付けます。これは、クラスを作成するための最も「きちんとした」明確な方法です。また、必要に応じてゲッターとセッターを使用して、パブリックプロパティを完全に回避することをお勧めします。

PHPの正規のコーディングスタイルは PSR-1 および PSR-2 で定義されています。また、チェックアウトすることをお勧めします PHPDoc

クラスメソッドのスコープ内で宣言された変数は、そのメソッド専用になることに注意してください。他のメソッドからアクセスする場合にのみ、クラスプロパティが必要です。

<?php
class Example {

  /**
   * Holds a private string
   * @var string
   */
  private $string = '';

  /**
   * Sets the private string variable
   */
  public function setString() {
    $this->string = 'This string is accessible by other methods';
    $privateVar = 'This string is only accessible from within this method';
  }

}
7
jchook

PHP Class using OOP(Object Oriented Programming))でプライベート変数を作成する方法。

PHPクラスでプライベート変数を宣言する最良の方法は、__ Constructionメソッドの上に変数を作成することです。慣例により、ドル記号の後にアンダースコアを付けて変数を開始できます(つまり、$ _ private_variable)。あなたのコードを読んでいる他のプログラマーに、それがプライベート変数であることを一目で知らせてください、brilliant

特別な理由がない限り、常にパブリックである__getterと__setterを除いて、クラス内のすべての変数をプライベートとして宣言してください。

__setter(__ set)関数を使用して、クラス内のプライベート変数に値を設定します。値が必要な場合は、__ getter(__ get)関数を使用して値を返します。

それを理解するために、さまざまなタイプの車両を作成するために使用できる非常に小さなクラスを作成しましょう。これにより、プライベート変数を適切に作成し、それに値を設定し、そこから値を返す方法についての洞察が得られます。

    <?php

    Class Vehicle{

        /* Delcaration of private variables */

        private $_name = "Default Vehicle";
        private $_model;
        private $_type;
        private $_identification;

        /* Declaration of private arrays */
        private $_mode = array();
        private $feature = array();

        /* Magic code entry function, think of it as a main() in C/C++ */
        public function __construct( $name, $model, $type ){
            $this->create_vehicle( $name, $model, $type );
        }

        /* __getter function */
        public function __get( $variable ){
            if( !empty($this->$variable) ){
                $get_variable = $this->$variable;
            }

            return $get_variable;
        }

        /* __setter function */
        public function __set( $variable, $target ){
            $this->$variable = $target;
        }

        /* Private function */
        private function create_vehicle( $name, $model, $type ){
            $this->__set( "_name", $name );
            $this->__set( "_model", $model);
            $this->__set( "_type", $type );
        }

    }

    //end of the class.

?>

<?php
    /* Using the Vehicle class to create a vehicle by passing
       three parameters 'vehicle name', 'vehicle model', 'vehicle type' 
       to the class.
    */

    $toyota = new Vehicle("Toyotal 101", "TY101", "Sedan");

    /* Get the name and store it in a variable for later use */
    $vehicle_name = $toyota->__get('_name');

    /* Set the vehicle mode or status */
    $vehicle_mode = array(
            'gas' => 50,
            'ignition' => 'OFF',
            'tire' => "OK",
            'year' => 2020,
            'mfg' => 'Toyoda',
            'condition' => 'New'
        );

    /* Create vehicle features */    
    $vehicle_feature = array(
            "Tire" => 4,
            "Horse Power" => "V6",
            "blah blah" => "foo",
            "Airbag" => 2,
            "Transmission" => "Automatic"
            //....
        );

    /* Create vehicle identification */
    $vehicle_identification = array(
        "VIN" => "0001234567ABCD89",
        "NAME" => $vehicle_name,
        "FEATURE" => $vehicle_feature,
        "MODEL" => $vehicle_mode,
        "YEAR" => 2020,
        "MFG" => "Totota"
    ); 


    /* Set vehicle identification */
    $toyota->__set("_identification", $vehicle_identification );

    /* Set vehicle features */
    $toyota->__set("_feature", $vehicle_feature );

    /* Set vehicle mode */
    $toyota->__set("_mode", $vehicle_mode);

    /* Retrieve information and store them in variable using __get (getter) */
    $vehicle_name = $toyota->__get('_name');
    $vehicle_mode = $toyota->__get('_mode');
    $vehicle_id =  $toyota->__get('_identification');
    $vehicle_features = $toyota->__get('_feature');
    $vehicle_type = $toyota->__get('_type');
    $vehicle_model = $toyota->__get('_model');


    /* Printing information using store values in the variables. */
    echo "Printing Vehicle Information\n";
    echo "*****************************\n";

    echo "Vehicle name is $vehicle_name \n";
    echo "Vehicle Model is $vehicle_model \n";
    echo "Vehich type is $vehicle_type \n";

    printf("\n\n");
    echo "Printing Vehicle Mode\n";
    echo "***********************\n";
    print_r( $vehicle_mode );

    printf("\n\n");
    echo "Printing Vehicle Features\n";
    echo "**************************\n";
    print_r( $vehicle_features );

    printf("\n\n");

    echo "Printing Vehicle Identification\n";
    echo "******************************\n";
    print_r( $vehicle_id );


    printf("\n\n");
?>

このコードの出力:

Printing Vehicle Information
*****************************
Vehicle name is Toyotal 101 
Vehicle Model is TY101 
Vehich type is Sedan 


Printing Vehicle Mode
***********************
Array
(
    [gas] => 50
    [ignition] => OFF
    [tire] => OK
    [year] => 2020
    [mfg] => Toyoda
    [condition] => New
)


Printing Vehicle Features
**************************
Array
(
    [Tire] => 4
    [Horse Power] => V6
    [blah blah] => foo
    [Airbag] => 2
    [Transmission] => Automatic
)


Printing Vehicle Identification
******************************
Array
(
    [VIN] => 0001234567ABCD89
    [NAME] => Toyotal 101
    [FEATURE] => Array
        (
            [Tire] => 4
            [Horse Power] => V6
            [blah blah] => foo
            [Airbag] => 2
            [Transmission] => Automatic
        )

    [MODEL] => Array
        (
            [gas] => 50
            [ignition] => OFF
            [tire] => OK
            [year] => 2020
            [mfg] => Toyoda
            [condition] => New
        )

    [YEAR] => 2020
    [MFG] => Totota
)

このコードでライブテストまたは実験を行うには、 デモ を参照し、名前を変更し、必要に応じて新しい車両を作成します。

これがお役に立てば幸いです。

0
Prince Adeyemi