4

Can I change a function or a variable defined in a class, from outside the class, but without using global variables?

this is the class, inside include file #2:

class moo{
  function whatever(){
    $somestuff = "....";
    return $somestuff; // <- is it possible to change this from "include file #1"
  }
}

in the main application, this is how the class is used:

include "file1.php";
include "file2.php"; // <- this is where the class above is defined

$what = $moo::whatever()
...
Alex
  • 66,732
  • 177
  • 439
  • 641

3 Answers3

7

Are you asking about Getters and Setters or Static variables

class moo{

    // Declare class variable
    public $somestuff = false;

    // Declare static class variable, this will be the same for all class
    // instances
    public static $myStatic = false;

    // Setter for class variable
    function setSomething($s)
    {
        $this->somestuff = $s;
        return true; 
    }

    // Getter for class variable
    function getSomething($s)
    {
        return $this->somestuff;
    }
}

moo::$myStatic = "Bar";

$moo = new moo();
$moo->setSomething("Foo");
// This will echo "Foo";
echo $moo->getSomething();

// This will echo "Bar"
echo moo::$myStatic;

// So will this
echo $moo::$myStatic;
xsorifc28
  • 5,112
  • 6
  • 16
  • 24
Jake N
  • 10,535
  • 11
  • 66
  • 112
3

There are several possibilities to achieve your goal. You could write a getMethod and a setMethod in your Class in order to set and get the variable.

class moo{

  public $somestuff = 'abcdefg';

  function setSomestuff (value) {
     $this->somestuff = value;
  }

  function getSomestuff () {
     return $this->somestuff;
  }
}
Thariama
  • 50,002
  • 13
  • 138
  • 166
1

Set it as an instance attribute in the constructor, then have the method return whatever value is in the attribute. That way you can change the value on different instances anywhere you can get a reference to them.

Ignacio Vazquez-Abrams
  • 776,304
  • 153
  • 1,341
  • 1,358