Jurudocs
Jurudocs

Reputation: 9165

PHP Basics: Can't deal with scope within classes

i got some trouble to understand scope in OOP. What i want is that $foo->test_item() prints "teststring"...Now it just fails with:

Warning: Missing argument 1 for testing::test_item()

Thanks a lot!

<?php

class testing {
    public $vari = "teststring";
    function test_item($vari){ //$this->vari doesn't work either
        print $vari;
    }
}

$foo = new testing();
$foo->test_item();

?> 

Upvotes: 0

Views: 50

Answers (4)

solarise
solarise

Reputation: 453

What's happening there is that $foo->test_item() is expecting something passed as an argument, so for example

$foo->test_item("Hello");

Would be correct in this case. This would print Hello

But, you may be wondering why it doesn't print teststring. This is because by calling

print $vari;

you are only printing the variable that has been passed to $foo->test_item()

However, if instead you do

function test_item(){  //notice I've removed the argument passed to test_item here...
  print $this->vari;
}

You will instead be printing the value of the class property $vari. Use $this->... to call functions or variables within the scope of the class. If you try it without $this-> then PHP will look for that variable within the function's local scope

Upvotes: 0

Madara&#39;s Ghost
Madara&#39;s Ghost

Reputation: 174957

Well, you've declared a method which expects an argument, which is missing. You should do:

$foo->test_item("Something");

As for the $this->, that goes inside of the class methods.

function test_item(){
    print $this->vari;
}

Upvotes: 2

George Cummins
George Cummins

Reputation: 28906

test_item() should be:

function test_item() {
    print $this->vari;
}

There is no need to pass $vari as a parameter.

Upvotes: 4

function parameters can not be as "$this->var",

change your class like

class testing {
    public $vari = "teststring";
    function test_item(){ //$this->vari doesn't work either
        print $this->vari;
    }
}

$foo = new testing();
$foo->test_item();

And read this Object-Oriented PHP for Beginners

Upvotes: 1

Related Questions