使用PHP,当我调用类的实例时,我会收到一个未定义的变量通知。我用其他语言编程,但不太熟悉PHP,你能不能看看我的代码并告诉我在定义类变量时的错误?感谢。
<?php
// create class Bike
class Bike
{
// create variables for class Bike of price, max_speed, and miles
var $price;
var $max_speed;
var $miles;
// create constructor for class Bike with user set price and max_speed
function __construct($price, $max_speed)
{
$this->price = $price;
$this->max_speed = $max_speed;
}
// METHODS for class Bike:
// displayInfo() - have this method display the bike's price, maximum speed, and the total miles driven
function displayInfo()
{
echo "Price: $" . $price . "<p>Maximum Speed: " . $max_speed . "</p>" . "<p>Total Miles Driven: " . $miles . "</p>";
}
// drive() - have it display "Driving" on the screen and increase the total miles driven by 10
function drive()
{
$miles = $miles + 10;
echo "<p>Driving!</p>" . "<p>Total Miles Driven: " . $miles . "</p>";
}
// reverse() - have it display "Reversing" on the screen and decrease the total miles driven by 5...
function reverse()
{
// What would you do to prevent the instance from having negative miles?
if($miles >= 5)
{
$miles = $miles - 5;
echo "<p>Reversing</p><p>Total Miles Driven: " . $miles . "</p>";
}
else
{
echo "<p>Total Miles Driven is less than 5 miles, unable to reverse!</p>";
}
}
}
?>
<?php
// Create 3 bike object class instances
$Schwinn = new Bike(50, '10mph');
$Specialized = new Bike(500, '25mph');
$Cannondale = new Bike(1000, '50mph');
// Have the first instance drive three times, reverse one and have it displayInfo().
var_dump($Schwinn); // shows instance is created with proper variable assignments
$Schwinn -> drive();
// $Schwinn -> drive();
// $Schwinn -> drive();
$Schwinn -> reverse();
$Schwinn -> displayInfo();
?>
错误:
注意:未定义的变量:第27行/home/heidi/Desktop/CodingDojo/OOP/php_oop_basic1.php中的里程数
注意:未定义的变量:第35行的/home/heidi/Desktop/CodingDojo/OOP/php_oop_basic1.php中的里程
注意:未定义的变量:第21行的/home/heidi/Desktop/CodingDojo/OOP/php_oop_basic1.php中的价格
注意:未定义的变量:第21行的/home/heidi/Desktop/CodingDojo/OOP/php_oop_basic1.php中的max_speed
注意:未定义的变量:第21行的/home/heidi/Desktop/CodingDojo/OOP/php_oop_basic1.php里程
答案 0 :(得分:5)
在PHP(以及javascript,python和许多其他版本)中,$this
在引用类变量时是显式的:
// local variable
$price
// class variable
$this->price
另请查看manual。
答案 1 :(得分:2)
您尝试分配需要使用的对象的变量(属性)的每个实例$this->var_name
。您的代码应更新为如下所示:
<?php
// create class Bike
class Bike
{
// create variables for class Bike of price, max_speed, and miles
var $price;
var $max_speed;
var $miles;
// create constructor for class Bike with user set price and max_speed
function __construct($price, $max_speed)
{
$this->price = $price;
$this->max_speed = $max_speed;
}
// METHODS for class Bike:
// displayInfo() - have this method display the bike's price, maximum speed, and the total miles driven
function displayInfo()
{
echo "Price: $" . $this->price . "<p>Maximum Speed: " . $this->max_speed . "</p>" . "<p>Total Miles Driven: " . $this->miles . "</p>";
}
// drive() - have it display "Driving" on the screen and increase the total miles driven by 10
function drive()
{
$this->miles = $this->miles + 10;
echo "<p>Driving!</p>" . "<p>Total Miles Driven: " . $this->miles . "</p>";
}
// reverse() - have it display "Reversing" on the screen and decrease the total miles driven by 5...
function reverse()
{
// What would you do to prevent the instance from having negative miles?
if($this->miles >= 5)
{
$this->miles = $this->miles - 5;
echo "<p>Reversing</p><p>Total Miles Driven: " . $this->miles . "</p>";
}
else
{
echo "<p>Total Miles Driven is less than 5 miles, unable to reverse!</p>";
}
}
}
?>
<?php
// Create 3 bike object class instances
$Schwinn = new Bike(50, '10mph');
$Specialized = new Bike(500, '25mph');
$Cannondale = new Bike(1000, '50mph');
// Have the first instance drive three times, reverse one and have it displayInfo().
var_dump($Schwinn); // shows instance is created with proper variable assignments
$Schwinn -> drive();
// $Schwinn -> drive();
// $Schwinn -> drive();
$Schwinn -> reverse();
$Schwinn -> displayInfo();
?>
此输出:
object(Bike)#1 (3) { ["price"]=> int(50) ["max_speed"]=> string(5) "10mph" ["miles"]=> NULL }
Driving!
Total Miles Driven: 10
Reversing
Total Miles Driven: 5
Price: $50
Maximum Speed: 10mph
Total Miles Driven: 5
另外,请研究定义属性和方法Visibility。在对象中使用var
定义属性假定它设置在“公共”可见范围内。例子:
class Bike
{
var $price; //var was almost depreciated in objects (early PHP 5.0)
public $price; //Now the commonly accepted method, same behavior as above.
protected $price; //protected means only this class, parent class or extended class can use this $price
private $price; //Private means only this class may use this $price property.
public $price = ''; //You can also define the variable when declaring it.
您还可以使用相同的可见范围声明方法(类函数)。此外,您只能使用$class->var_name
获取类定义之外的公共属性(对象变量)。私有属性和受保护属性将导致致命错误,因为它们无法直接访问。