It is better to use encapsulation, which is one of the biggest advantages of OOP. Make your attributes private and use setters and getters to access your attributes.
If you use setters you can do checks before setting a value to an attribute. For example:
If you want to make sure the $id attribute is an integer you can check it in your setter. If you use direct access to your attribute you can't. If you want to change a check for an attribute, you only have to change it at one location.
Because using setters is the way to go, you should also use getters, otherwise there is still a possibility to set your attributes without using the setter.
Please have a look at the magical __set() and __get() methods to make your life easier when it comes to setters and getters.
More information about __set and __get (and other magic methods):
http://www.php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.members
Edit
I do agree with Gordon. But still it's worth noting the possibility of using magic methods.
@Axsuul:
When you define a property use the private, public or protected keyword. For example:
protected $id;
or
private $id;
From
http://php.net/manual/en/language.oop5.visibility.php
"Class properties must be defined as public, private, or protected. If declared using var without an explicit visibility keyword, the property will be defined as public."
There is no option to change the default visibility.