In PHP classes, is it possible to create a private variable inside a function?

When using PHP classes, I noticed that inside a class, when I define a variable in a function as a property of that class with $this->variablename

, it automatically becomes a public variable of that class.

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

      

To

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

      

Outputs: string

However, in the case where I wanted to create private variables that are only accessible to functions within a class, is there anyway to setstring()

declare them only inside a function setstring()

? Instead of declaring them private outside of a function like this.

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

      

The reasons someone might do this is to be careful not to have a long list of private variables declared at the beginning of the class.

+6


source to share


2 answers


No , there is no way to do it.

In PHP, you usually declare all of your class / instance properties above your functions in alphabetical order with self-documenting comments. This is the cleanest and cleanest way to write classes. It is also recommended that you avoid public properties entirely, using getters and setters as needed.

The canonical coding style for PHP is defined in PSR-1 and PSR-2 . I also recommend that you check PHPDoc .



Be aware that variables declared within a class method will be private to that method. You only need a property of the class if you plan to access it from other methods.

<?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';
  }

}

      

+6


source


  How to create private variables in a PHP class using OOP (Object Oriented Programming).

The best way to declare private variables in a PHP class is to create them above the __Construction method. By convention, you can start a variable with an underscore after the dollar sign (i.e. $ _Private_variable) so that other programmers reading your codes will know right away. that this is a private variable, brilliant!

Please declare all your variables in the class as private, except for __getter and __setter, which are always public unless you have a reason not to.

Use the __setter (__set) function to set values ​​for your private variable within the class, and when a value is needed, use the __getter (__get) function to return values.

To understand this, let's create a very small class that could be used to create different types of vehicles. This will give you an idea of ​​how to properly create private variables, set values ​​for them, and return values ​​from them, ready?



    <?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");
?>

      

Output of this code:

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
)

      

To test live or experiment with this code, check out the demo , change the name, create new car (s) of your choice.

Hope this helps.

0


source







All Articles