Польская запись

Seregarival

Новичок
for ($j=1; $j<9; $j++)
{
var_dump($j);var_dump($U[$j]->Node);
}
Результат:
int(1) NULL int(2) NULL int(3) NULL int(4) NULL int(5) NULL int(6) NULL int(7) NULL int(8) NULL

Скорее всего я что-то не так делаю с конструктором, да?
public function __construct($j, $simbol)
{
$Node = $simbol;
$LP=0;
$PP=0;
}
 

Seregarival

Новичок
Подскажите пожалуйста, решил воспользоваться регулярными выражениями и что-то не выходит:

PHP:
$formula='(a+b)*(c-d)+e'
$formula=preg_replace("+", ")+(", $formula);
$formula=preg_replace("*", ")*(", $formula);
$formula=preg_replace("/", ")/(", $formula);
$formula=preg_replace("-", ")-(", $formula);
print($formula);
Выдает ошибки вида:
Warning: preg_replace() [function.preg-replace]: No ending delimiter '+' found in M:\home\testfirst.ru\www\prefix.php on line 182
 

Seregarival

Новичок
C польскими записями разобрался ... Делаю вывод дерева разбора на экран стандартными функциями рисования, появились вопросы, помогите пожалуйста:

1) Скрипт не находит шрифт, по сути его небыло на сервере PHP почему-то, я взял стандартный из Windows - Arial, но не знаю куда его правильно поместить, чтобы скрипт его видел ...
Пишет: Warning: imagettftext() [function.imagettftext]: Invalid font filename in M:\home\testfirst.ru\www\index.php on line 48
2) Как правильно обратиться к свойству класса?
например строка if (($Tek->PP) == null) - неправильная, а как правильно проверить, присвоено ли этому свойству какое-то значение?

PHP:
<?php
class Vertex {
	public $Father;
	public $LP;
	public $PP;
	public $Type;}
ini_set('display_errors',1);
error_reporting(E_ALL);	
$formula1='abcd/*e-+';
$formula='+-e*/dcba';
$dl=strlen($formula);
$image=imagecreate(8,8);
$gold=imagecolorallocate($image, 255, 240, 00);
$red = imagecolorallocate($image, 0, 0, 255);
$blue = imagecolorallocate($image, 255, 0, 0);
$Perem =0;
$x=200;
$y=100;
			for ($i = 0; $i <= $dl-1; $i++)
			{
				$simbol=substr($formula,$i,1);
				switch($simbol)
				{
					case "+": case "-": case "*": case "/":
						if ($Perem != 1) 
						{
							$Perem = 1;
							$Koren= new Vertex;
							$Koren->Type=1; 
							$last=$Koren;
							$Tek=$Koren;
							$image = imagecreatetruecolor(18,18);
							imagefilledellipse($image, $x, $y, 8, 8, $red);
							imagettftext($image, 5, 0, 8, 8, $blue, 'Arial', $simbol);
							break;
						} else
						{
							if (($Tek->PP) == null)
							{
								$x=$x+30; $y=$y+30;
								$ttt=$Tek;
								$Vert[]->PP=new Vertex;
								$Vert[]->Type=1;
								$Vert[]->Father=$ttt;
								$Tek=$Vert;
								$image = imagecreatetruecolor(18,18);
								imagefilledellipse($image, $x, $y, 8, 8, $red);
								imagettftext($image, 5, 0, 8, 8, $blue, 'Arial', $simbol);
								break;
							} else
							if ($Tek->LP == null)
							{
								$x=$x-30; $y=$y+30;
								$ttt=$Tek;
								$Vert[]->LP=new Vertex;
								$Vert[]->Type=1;
								$Vert[]->Father=$ttt;
								$Tek=$Vert;
								$image = imagecreatetruecolor(18,18);
								imagefilledellipse($image, $x, $y, 8, 8, $red);
								imagettftext($image, 5, 0, 8, 8, $blue, 'Arial', $simbol);
								break;
							}
						}
		
					case "a": case "b": case "c": case "d": case "e": case "f":
						if (($Tek->PP) == null)
						{
							$x=$x+30; $y=$y+30;
							$ttt=$Tek;
							$Vert[]->PP=new Vertex;
							$Vert[]->Father=$ttt;
							$Vert[]->Type=0;
							$Tek=$ttt;
							$image = imagecreatetruecolor(18,18);
							imagefilledellipse($image, $x, $y, 8, 8, $red);
							imagettftext($image, 5, 0, 8, 8, $blue, 'Arial', $simbol);
							break;
						} else
						if (($Tek->LP) == null)
						{
							$x=$x-30; $y=$y+30;
							$ttt=$Tek;
							$Vert[]->LP=new Vertex;
							$Vert[]->Father=$ttt;
							$Vert[]->$Type=0;
							$Tek=$ttt;
							$image = imagecreatetruecolor(18,18);
							imagefilledellipse($image, $x, $y, 8, 8, $red);
							imagettftext($image, 5, 0, 8, 8, $blue, 'Arial', $simbol);
							break;
						} else
						Vverh();
					}
				}
Function Vverh()
{ GLOBAL $Tek, $numb;
	$Tek=($Tek->Father);
	if (($Tek->PP) == null)
		{
			$ttt=$tek;
			$Vert[]->PP=new Vertex;
			$Vert[]->Father=$ttt;
			$Vert[]->Type=0;
			$Tek=$ttt;
			$image = imagecreatetruecolor(18,18);
			imagefilledellipse($image, $x, $y, 8, 8, $red);
			imagettftext($image, 5, 0, 8, 8, $blue, 'Arial', $simbol);
			break;
		} else
	if (($Tek->LP) == null)
		{
			$ttt=$tek;
			$Vert[]->LP=new Vertex;
			$Vert[]->Father=$ttt;
			$Vert[]->$Type=0;
			$Tek=$ttt;
			$image = imagecreatetruecolor(18,18);
			imagefilledellipse($image, $x, $y, 8, 8, $red);
			imagettftext($image, 5, 0, 8, 8, $blue, 'Arial', $simbol);
			break;
		} else
		Vverh();
}	
?>
-~{}~ 14.04.10 18:25:

Со шрифтом вроде разобрался, добавил разрешение, хотя в книге без разрешения везде указывается и ошибку перестал выдавать ...
С обращением к свойствам сложнее, ничего похожего не могу найти ...

-~{}~ 14.04.10 18:48:

Подскажите пожалуйста как обратиться к свойству в этом случае? Знаю, что $this должна помочь, но как его "присобачить"...
($this->PP)==null по идее должно сработать, но тогда не знаю как объяснить к какому классу это относится, да и пишет странное сообщение:
Fatal error: Using $this when not in object context in M:\home\testfirst.ru\www\index.php on line 38
 

soines

Новичок
Seregarival, во-первых нужно было создать новую тему.
Во-вторых в этом коде никто разбираться не будет, так как там и ошибок полно и вообще не понятно что он делает.

PHP:
<?php

class Foo
{
    public $bar;
}

$a = new Foo( );
var_dump( $a->bar == null ); // bool( true )
$a->bar = 'some value';
var_dump( $a->bar == null ); // bool( false )

?>
Зачем делать класс из одних публичных свойств? С таким же успехом можно было использовать массивы или есть уж так хочется классы , то stdClass.
 
Сверху