Определение переменной в классе и использование ее в функциях - PullRequest
6 голосов
/ 25 марта 2010

Я пытаюсь выучить классы PHP, чтобы начать писать больше проектов ООП. Чтобы помочь мне учиться, я создаю класс, который использует Rapidshare API. Вот мой класс:

<?php

class RS
{
    public $baseUrl = 'http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=';

    function apiCall($params)
    {
        echo $baseUrl;
    }
}

?>

$params будет содержать набор значений пары ключей, например:

$params = array(
    'sub'   =>  'listfiles_v1',
    'type'  =>  'prem',
    'login' =>  '746625',
    'password'  =>  'not_my_real_pass',
    'realfolder'    => '0',
    'fields'    => 'filename,downloads,size',
    );

Который позже будет добавлен к $baseUrl для создания окончательного URL-адреса запроса, но я не могу заставить $ baseUrl появляться в моем методе apiCall(). Я пробовал следующее:

var $baseUrl = 'http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=';

$baseUrl = 'http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=';

private $baseUrl = 'http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=';

И даже попробовал $this->baseUrl = $baseUrl; в моем apiCall() метиде, я не знаю, о чем, черт возьми, я думал, хотя, смеется.

Любая помощь приветствуется спасибо:)

Ответы [ 3 ]

13 голосов
/ 25 марта 2010

Попробуйте

class RS {
  public $baseUrl = 'http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=';

  function apiCall($params) {
    echo $this->baseUrl;
  }
}

Полагаю, вы так называете этот код?

$rs = new RS;
$rs->apiCall($params);

Атрибуты класса должны иметь префикс $this в PHP. Единственными исключениями являются статические методы и константы класса при использовании self.

2 голосов
/ 25 марта 2010

Попробуйте это:

class C
{
    public $v = 'Hello, world!';

    function printHello()
    {
        echo $this->v;   // "Hello, world!"
    }
}

$obj = new C();
$obj->printHello();
0 голосов
/ 25 марта 2010
function apiCall($params)
{
    echo $this->baseUrl;
}

Вы можете получить доступ к переменным класса int методами, подобными этим. Когда вы используете $this->baseUrl = $baseUrl; Вы изменяете значение класса var $baseUrl с помощью локальной переменной var $baseUrl, которая, вероятно, равна NULL. Вот почему вы не получаете никакого значения обратно

...