[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: объявление переменных в классе
Guest
как мне правильно объявить переменные в классе, чтобы использовать их во всех методах этого класса

class example
{
var $x1,$x2,$x3;
$x1[]=1;
$x1[]=2;
$x2[]=1;
$x2[]=2;
$x3[]=4;
function check()
{
echo $this->x1[0];
}
function check2()
{
echo $this->x3[0];
}
}


$x=new example();
$x->check();


такое объявление массивов не работает, как правильно записать?



Спустя 2 минуты, 26 секунд (27.08.2010 - 10:28) linker написал(а):
class example
{
public $x1 = array(1,2);
public $x2 = array(1, 2);
public $x3 = array(4);

function check()
{
echo $this->x1[0];
}
function check2()
{
echo $this->x3[0];
}
}


$x=new example();
$x->check();

Спустя 14 минут, 5 секунд (27.08.2010 - 10:43) Guest написал(а):
linker
а если я объявлю их как массивы?

public $x1 = array();
public $x2 = array();
public $x3 = array();

а потом мне нужно передать им значение именно так arr[]=xxxx;
как мне этого добиться?

Спустя 2 минуты, 40 секунд (27.08.2010 - 10:45) linker написал(а):
$x->x3[] = 12345;

Спустя 2 минуты, 52 секунды (27.08.2010 - 10:48) Guest написал(а):
вот конкретнее

$bb[]="/\[b\]\s*/i";
$bb[]="/\s*\[\/b\]/i";
$tags[]="<b>";
$tags[]="</b>";
$bbempty[]="/\[b\](\s*)\[\/b\]/i";
$bbdouble[]="/\[b\]((\s*)\[b\])+/i";
$bbdouble[]="/(\[\/b\](\s*))+\[\/b\]+/i";
$tagsdouble[]="";
$tagsdouble[]="
";


в таком виде нельзя присваивать значения в теле класса? потом я ведь добавлю тоже самое для другого тэга, так удобнее записывать.

Спустя 5 минут, 10 секунд (27.08.2010 - 10:53) Guest написал(а):
я неправильно выразился,я знаю как изменить значение класса извне, мне нужно в самом классе вот в таком виде присвоить значения массивам.

Спустя 5 минут (27.08.2010 - 10:58) linker написал(а):
Внутри класса нет, я же первым постом показал как можно присвоить, либо
class testclass
{
public $x = array('d', 'e', 'f');
function setx($value)
{
$this->x = $value;
}
}

$x = new testclass();
$x->setx(array('a', 'b', 'c'));

Спустя 2 минуты, 2 секунды (27.08.2010 - 11:00) Guest написал(а):
linker
блин.. то есть лишние действия только делать, лучше тогда засунуть нарямую в методы.
пасиба!!

Спустя 4 минуты, 46 секунд (27.08.2010 - 11:05) linker написал(а):
Guest
Наоборот избавляешься от кучи лишних действий.

Спустя 5 минут, 8 секунд (27.08.2010 - 11:10) Guest написал(а):
linker
да, я вот знаешь как подумал, засунуть в отдельный метод все шаблоны, потом просто объявить этот метод перед нужными действиями, так надеюсь получится?

Спустя 1 минута, 33 секунды (27.08.2010 - 11:12) linker написал(а):
Получится-то оно получится, просто не хорошо так.

Спустя 5 минут, 26 секунд (27.08.2010 - 11:17) Guest написал(а):
linker
почему?
а как лучше всего сделать?
записать все шаблоны в виде array() не удобно как-то в данном случаи!

Спустя 7 минут, 34 секунды (27.08.2010 - 11:25) linker написал(а):
Ну так лучше
$bb = array("/\[b\]\s*/i", "/\s*\[\/b\]/i");
чем
$bb[]="/\[b\]\s*/i";
$bb[]="/\s*\[\/b\]/i";
Хотя тут лучше сам шаблон переписать на что-нибудь типа "/\[\/?b\]/i"

Спустя 3 минуты, 11 секунд (27.08.2010 - 11:28) Guest написал(а):
linker
я эти шаблоны и бб-декодер очень давно написал, сейчас могу минимум в два раза все сократить, но так лень))

сейчас буду думать стоит или нет.
в любом случаи спасибо за подсказки!

Спустя 4 часа, 57 минут, 45 секунд (27.08.2010 - 16:26) Nord написал(а):
Цитата
я неправильно выразился,я знаю как изменить значение класса извне, мне нужно в самом классе вот в таком виде присвоить значения массивам.

Если очень хочется, то можно присвоить в конструкторе

class example{
public $x1 = array();
public $x2 = array();
public $x3 = array();
function __construct(){
$this->x1[] = 1;
$this->x1[] = 2;
$this->x2[] = 1;
$this->x2[] = 2;
$this->x3[] = 4;
}
function check() {
echo $this->x1[0];
}
function check2() {
echo $this->x3[0];
}

}

$x = new example();
$x->check(); // 1

Но linker прав, вариант

$bb = array("/\[b\]\s*/i", "/\s*\[\/b\]/i");
гораздо красивее

Спустя 6 месяцев, 29 дней, 23 часа, 34 минуты, 8 секунд (27.03.2011 - 16:00) Гость_Aleks написал(а):
Помогите разобраться.. что то недопонимаю в работе с массивами внутри класса.. как их правильно обьвить и использовать.???
до того как попытался создать класс функции работали..
class InfoDir {

public $files = array ( );
public $filestim = array ( );


function readFileInDir ($pathToDir) {

// $pathToDir = 'd:/temp/';

if ($handle = opendir($pathToDir)) {
// echo "Directory handle: $handle\n";
echo "Files: \n";

// Это корректный способ цикла по директории.
while (false !== ($filename = readdir($handle))) {
if ($filename != "." && $filename != "..")
{
//global $files, $filestim;
[color=red]$this->files = $filename; [/color] // ругается здесь !!!
$this->filestim = fileatime ($pathToDir.$filename);
}


/* echo "в последний раз файл $filename был изменен: " . date ("F d Y H:i:s.",
filemtime($filename)); */


}

// print_r($files);

// print_r($filestim);


echo "<br>";





closedir($handle);
}

}


function printFileInDir () {

// global $files, $filestim;
for ( $i=0 ;$i < count ($this->$files) ;$i++ ) {
echo "в последний раз файл ";
print_r ($this->$files[$i]);
echo " был изменен: ";
$res = date ("F d Y H:i:s.", $this->$filestim[$i]);
print_r ($res);
echo "<br>";
}

}

}


$path1 = 'd:/temp/';
$listFilesDir = new infoDir;
infoDir::readFileInDir ($path1);
infoDir::printFileInDir();

//</pre>





?>

Спустя 16 часов, 40 минут, 52 секунды (28.03.2011 - 08:41) linker написал(а):
Вызываешь методы как статические
infoDir::readFileInDir ($path1);
infoDir::printFileInDir();
а внутри методов используешь $this. Объявлено как массив
public $files = array ( ); 
а присваиваешь как обычной переменной
$this->files = $filename;
и т.д. и т.п. Ну и логика неправильная в купе.

Спустя 6 часов, 14 минут, 59 секунд (28.03.2011 - 14:56) Kv_Aleks написал(а):
class InfoDir {


function readFileInDir ($pathToDir) {

// $pathToDir = 'd:/temp/';

if ($handle = opendir($pathToDir)) {
// echo "Directory handle: $handle\n";
echo "Files: \n";
echo $pathToDir;
echo '<br>';

// Это не корректный способ цикла по директории.
/* while ($filename = readdir($handle)) {

if ($filename != "." && $filename != "..") {
// echo "$filename\n<br>";
global $files, $filestim;
$files[] = $filename;
$filestim[] = fileatime ($pathToDir.$filename);

}

}
*/
// ----коментарить тут

// Это корректный способ цикла по директории.
while (false !== ($filename = readdir($handle))) {

if ($filename != "." && $filename != "..")
{
global $files, $filestim;
$files[] = $filename;
$filestim[] = fileatime ($pathToDir.$filename);
}
}
echo "<br>";
closedir($handle);
}
}




function printFileInDir () {

global $files, $filestim;
for ( $i=0 ;$i < count ($files) ;$i++ ) {
echo "в последний раз файл ";
print_r ($files[$i]);
echo " был изменен: ";
$res = date ("F d Y H:i:s.", $filestim[$i]);
print_r ($res);
echo "<br>";
}

}

}

$path1 = 'd:/temp/';
$files = array ( );
$filestim = array ( );
$listFilesDir = new infoDir;
$listFilesDir->readFileInDir ($path1);
//print_r($files);
$listFilesDir->printFileInDir();



Спустя 6 минут, 22 секунды (28.03.2011 - 15:02) Kv_Aleks написал(а):
Переделал сам утром... начал с догадки о неправильном вызове функции...
$listFilesDir->readFileInDir ($path1);
и дело сдвинулось с метрвой точки..

и скобки - очень важно не втыкать ...


методы как статические - как это понимать ??

но всё таки на обум - печатал переменые и смотрел на чём затыкаеться...


linker можешь всё что написал обьяснить на пальцах или дать ссылочку для
уровня ниже плинтуса программирую 3 день...

еще вопрос о конструкторах что за хрень ? что, как и когда в неё нужно впихивать..

Спустя 7 минут (28.03.2011 - 15:09) Kv_Aleks написал(а):
еще просьба если не сложно показать как правильно в моём коде получить доступ к массивам не через глобал а через указатели...

спасибо
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.