Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) 1 [2]  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Простая задача для реализации в ООП
Shuriken  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 257
Пользователь №: 17632
На форуме: 7 лет, 7 месяцев, 6 дней
Карма: 7




Цитата (Игорь_Vasinsky @ 16.08.2012 - 10:35)
Цитата
square,2

Цитата
Квадрат: Площадь = 0 Периметр = 0.

Блин, точно
Исправил


class Square extends Figure {
var $a;
function __construct($x) {
$this->a=$x;
}
function func() {
$this->area=pow($this->a,2);
echo "Квадрат: Площадь = $this->area ";
$this->perimetr=4*$this->a;
echo "Периметр = $this->perimetr.<br>";
}
}



Результат:
Круг: Площадь = 28.2743338823 Периметр = 18.8495559215.
Квадрат: Площадь = 4 Периметр = 8.
Треугольник: Площадь = 1.5 Периметр = 8.33900922451.

Это сообщение отредактировал Shuriken - 16.08.2012 - 13:40
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25989
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 23 дня
Карма: 725

Не курю:
1 год, 2 месяца, 9 дней


как то ты конкатенацией пренебрегаешь)

class Square extends Figure {
var $a;
function __construct($x) {
$this->a=$x;
}
function func() {
$this->area=pow($this->a,2);
echo "Квадрат: Площадь = ".$this->area;
$this->perimetr=4*$this->a;
echo "Периметр = ".$this->perimetr."<br>";
}
}


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Dezigo  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Indiana Jones
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1000
Пользователь №: 5429
На форуме: 8 лет, 5 месяцев, 13 дней
Карма: 45




Надо и мне как нибудь написать свой подход ))
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
polimer  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered










Class Figure{

function __construct($type='',$a,$b=null,$c=null ){

if($type == 'square'){
echo $type."-Perimetr:".($a * 4).' Area:'.($a*$a);
}elseif($type == 'triangle'){
$p = ($a+$b+$c)/2;
echo $type."-Perimetr:".($a+$b+$c).' Area:'.(sqrt($p * ($p-$a) * ($p - $b) * ($p - $c)));
}elseif($type == 'circle'){
echo $type."-Perimetr:".(2 * M_PI * $a).' Area:'.(M_PI * $a * $a);
}
else{echo '';}
}
}
$file=fopen("file.txt","r+");
while (!feof($file)) {
$fig=explode (",",fgets($file));
$out=new Figure($fig[0],$fig[1],$fig[2],$fig[3]);
echo '<br>';
}


P.S Что такое полиморфизм и наследование?)
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Michael  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6065
Пользователь №: 18498
На форуме: 7 лет, 4 месяца, 10 дней
Карма: 256




polimer, можешь свободно высунуть свою ф-цию из класса и ею пользоваться, смысла пихать ее в класс нет.

Цитата (glock18)
Постановка задачи:
Реализовать структуру классов...
Обязательные условия:
...


--------------------
There never was a struggle in the soul of a good man that was not hard
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
xlebosol  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Знатный быдлокодер
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 337
Пользователь №: 32761
На форуме: 4 года, 5 месяцев, 17 дней
Карма: 19




Цитата (linker @ 28.06.2010 - 12:50)

2. Выкинуть абсолютно бесполезную конструкцию
if (!$this->type) return '';
в методах getArea, getPerimeter

Ее не выкинуть надо. Это есть безопасное программирование. А перенести в родительский класс в один метод (isNoType) и вызывать через parent.
PMПисьмо на e-mail пользователюICQ
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Гость_Сергей  
[x] Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Ну, как-то так


<?php
class
file
{
private $file; // идентификатор файла

public function __construct($file_name)
{
$this->file = fopen($file_name, 'r');
}
// Считывает файл и заносит каждую строку с файла в массив file_str
public function read_file()
{
if($this->file){

while (!feof($this->file))
{
$file_str[] = fgets($this->file, 999); // считываем построчно файла
}
}

else
{
echo "Ошибка открытия файла";
}
return $file_str;
}

// вытаскивает из файла имя фигуры и ее параметры
public function decrypt_data()
{
foreach($this->read_file() as $str){

$parameters[] = explode(",",trim($str));
}
return $parameters;
}
}



abstract class figure
{
abstract public function P();
abstract public function S();
}
// класс квадрат
class Square extends figure
{
public $a; // длина стороны квадрата
public $type = __CLASS__;

public function __construct($a)
{
$this->a = $a;
}
// Вычисляем периметр квадрата
public function P()
{
return 4*$this->a;
}
// Вычисляем площадь квадрата
public function S()
{
return pow($this->a,2);
}
}

// класс круг
class Circle extends figure
{
public $r; // Радиус круга
public $type = __CLASS__;

public function __construct($r)
{
$this->r = $r;
}
// Вычисляем периметр круга
public function P()
{
return 2*pi()*$this->r;
}
// Вычисляем площадь круга
public function S()
{
return pi() * pow($this->r,2);
}
}

// класс треугольник
class Triangle extends figure
{
private $a; // сторона основание
private $b;
private $c;
public $type = __CLASS__;

public function __construct($a,$b,$c)
{
$this->a = $a;
$this->b = $b;
$this->c = $c;
}
// Вычисляем периметр треугольника
public function P()
{
$P = $this->a + $this->b + $this->c;
return $P;
}
// Вычисляем высоту треугольника
public function H(){
$p = $this->P()/2; // полупериметр треугольника
return (2/$this->a)*sqrt($p * ($p-$this->a) * ($p-$this->b) * ($p - $this->c));
}
// Вычисляем площадь треугольника
public function S()
{
return 0.5 * $this->a *$this->H();
}
}



$file = new file("Z:/home/localhost/www/test_for_job/figure.txt");
$file_date = $file->decrypt_data();


foreach($file_date as $str){
switch(strlen($str[0]))
{
case 7 : $figure[] = new square($str[1]); break;
case 4 : $figure[] = new circle($str[1]); break;
case 11 : $figure[] = new triangle($str[1],$str[2],$str[3]); break;
}
}


foreach($figure as $obj)
{
if ($obj instanceof Figure) { // Если мы работаем с наследниками Figure
echo $obj->type.", площадь = ".round($obj->S(),2).", периметр = ".round($obj->P(),2)."</br>";
}
}



Исходные данные:
Квадрат,22
Круг,10
Треугольник,20,10,15
Квадрат,10
Круг,100

Результат:
Square, площадь = 484, периметр = 88
Circle, площадь = 314.16, периметр = 62.83
Triangle, площадь = 72.62, периметр = 45
Square, площадь = 100, периметр = 40
Circle, площадь = 31415.93, периметр = 628.32
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









можно еще метод decrypt_data() лучше:

public function decrypt_data($symbol)
{
foreach($this->read_file() as $str){

$parameters[] = explode($symbol,trim($str));
}
return $parameters;
}
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
SDV  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 73
Пользователь №: 37028
На форуме: 3 года, 8 месяцев, 7 дней
Карма: 2




abstract class Figure{

abstract function area();
abstract function perimeter();
}

class Square extends Figure{
private $a;

public function __construct($a){
if ( isset($a) )
$this->a = (float)$a;
else
throw new Exception('не задана сторона квадрата');
}

public function area(){
return pow($this->a,2);
}

public function perimeter(){
return 4*$this->a;
}
}


class Circle extends Figure{
private $r;

public function __construct($r){
if ( isset($r) )
$this->r = (float)$r;
else
throw new Exception('не задан радиус круга');
}

public function area(){
return pi()*pow($this->r,2);
}

public function perimeter(){
return 4*$this->r;
}
}


class Triangle extends Figure{
private $a,$b,$c;

public function __construct($a,$b,$c){
if ( isset($a) && isset($b) && isset($c) ){
$this->a = (float)$a;
$this->b = (float)$b;
$this->c = (float)$c;
}else
throw new Exception('заданы не все стороны треугольника');
}

public function area(){
$p = $this->perimeter()/2;
return sqrt($p*($p - $this->a)*($p - $this->b)*($p - $this->c));
}

public function perimeter(){
return $this->a + $this->b + $this->c;
}
}


$figures = file('figure.txt');
foreach ( $figures as $f_line ){
@list($figure, $a, $b, $c) = explode(' ',$f_line);
$figure = ucfirst($figure);
$figure_cl = new $figure($a,$b,$c);
echo("$figure\tS:".$figure_cl->area()."\tP:".$figure_cl->perimeter()."\n");
}


figure.txt

circle 1
square 1
square 3.2
triangle 1 2 2
circle 1.5
square 1.0
square 3.2002
triangle 1 2 2.3

результат

Circle S:3.1415926535898 P:4
Square S:1 P:4
Square S:10.24 P:12.8
Triangle S:0.96824583655185 P:5
Circle S:7.068583470577 P:6
Square S:1 P:4
Square S:10.24128004 P:12.8008
Triangle S:0.99736841237328 P:5.3
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
mvg  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 474
Пользователь №: 37895
На форуме: 3 года, 4 месяца, 7 дней
Карма: 22




Цитата (SDV @ 12.03.2014 - 21:48)
abstract class Figure{

abstract function area();
abstract function perimeter();
}

class Square extends Figure{
private $a;

public function __construct($a){
if ( isset($a) )
$this->a = (float)$a;
else
throw new Exception('не задана сторона квадрата');
}

public function area(){
return pow($this->a,2);
}

public function perimeter(){
return 4*$this->a;
}
}


class Circle extends Figure{
private $r;

public function __construct($r){
if ( isset($r) )
$this->r = (float)$r;
else
throw new Exception('не задан радиус круга');
}

public function area(){
return pi()*pow($this->r,2);
}

public function perimeter(){
return 4*$this->r;
}
}


class Triangle extends Figure{
private $a,$b,$c;

public function __construct($a,$b,$c){
if ( isset($a) && isset($b) && isset($c) ){
$this->a = (float)$a;
$this->b = (float)$b;
$this->c = (float)$c;
}else
throw new Exception('заданы не все стороны треугольника');
}

public function area(){
$p = $this->perimeter()/2;
return sqrt($p*($p - $this->a)*($p - $this->b)*($p - $this->c));
}

public function perimeter(){
return $this->a + $this->b + $this->c;
}
}


$figures = file('figure.txt');
foreach ( $figures as $f_line ){
@list($figure, $a, $b, $c) = explode(' ',$f_line);
$figure = ucfirst($figure);
$figure_cl = new $figure($a,$b,$c);
echo("$figure\tS:".$figure_cl->area()."\tP:".$figure_cl->perimeter()."\n");
}


figure.txt

circle 1
square 1
square 3.2
triangle 1 2 2
circle 1.5
square 1.0
square 3.2002
triangle 1 2 2.3

результат

Circle S:3.1415926535898 P:4
Square S:1 P:4
Square S:10.24 P:12.8
Triangle S:0.96824583655185 P:5
Circle S:7.068583470577 P:6
Square S:1 P:4
Square S:10.24128004 P:12.8008
Triangle S:0.99736841237328 P:5.3

Какой блок будет исключения ловить в случае ошибки?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
casper - gg  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Пользователь
Сообщений: 216
Пользователь №: 42190
На форуме: 1 год, 2 дня
Карма: 10




каспер рискнул:


class Figures
{
static $number = 1;

public function __construct($type='невероятная', $periphery='невероятный', $area='невероятную')
{
$this->num = self::$number++;
$this->_make_srting($type, $periphery, $area);
}

private function _make_srting($type, $periphery, $area) // формируем строку
{
$this->out = '<span style="color:green;"> Фигура '. $this->num .'</span> :
'
. $type .' имеет периметр '. $periphery .' и площадь '. $area .'; <br/>';
}

protected function calc_perimetr() { } // расчет периметра фигуры
protected function calc_area() { } // расчет площади фигуры
protected function out() { } // возвращение результата из класса
}

class Square extends Figures
{
public function __construct($side)
{
if($side > 0 && is_numeric($side))
{
$periphery = $this-> calc_perimetr($side);
$area = $this-> calc_area($side);
parent::__construct('Квадрат', $periphery, $area);
}
else
parent::__construct();
}

public function calc_perimetr($side)
{
return $side * 4;
}

public function calc_area($side)
{
return $side * $side;
}

public function out()
{
return $this->out;
}
}


class Circle extends Figures
{
public function __construct($ray)
{
if($ray > 0 && is_numeric($ray))
{
$pi=3.14;
$periphery = $this-> calc_perimetr($ray, $pi);
$area = $this-> calc_area($ray, $pi);
parent::__construct('Круг', $periphery, $area);
}
else
parent::__construct();
}

public function calc_perimetr($ray, $pi)
{
return $ray * $pi * 2;
}

public function calc_area($ray, $pi)
{
return $ray * $ray * $pi;
}

public function out()
{
return $this->out;
}
}

class Traingle extends Figures
{
public function __construct($sideA, $sideB, $sideC)
{
$prop = ($sideA + $sideB + $sideC / 2);

if(!is_numeric($sideA) || !is_numeric($sideB) || !is_numeric($sideC))
parent::__construct();
elseif($sideA <= 0 || $sideB <= 0 || $sideC <= 0)
parent::__construct();
elseif($prop <= $sideA || $prop <= $sideB || $prop <= $sideC)
parent::__construct();
else
{
$periphery = $this-> calc_perimetr($prop);
$area = $this-> calc_area($sideA, $sideB, $sideC);
parent::__construct('Треугольник', $periphery, $area);
}
}


public function calc_perimetr($prop)
{
return $this->periph = $prop * 2;;
}

public function calc_area($sideA, $sideB, $sideC)
{
$p = ( $this->periph / 2 );
$figure = $p * ( ($p - $sideA) * ($p - $sideB) * ($p - $sideC) );
return sqrt( $figure );
}

public function out()
{
return $this->out;
}
}


// Вместо файла

$file[] = '<square> <52>';
$file[] = '<square> <16>';
$file[] = '<square> <24>';
$file[] = '<circle> <38>';
$file[] = '<circle> <11>';
$file[] = '<circle> <24>';
$file[] = '<traingle> <4 5 5>';
$file[] = '<square> <hr>';
$file[] = '<traingle> <7 7 hr>';
$file[] = '<circle> <98>';
$file[] = '<traingle> <40 20 50>';

// формируем страницу

foreach($file as $figure)
{
$data = explode('> <', $figure);
$type = ltrim( rtrim($data[0], ">") , "<");
$param = explode( ' ' , ltrim( rtrim($data[1], ">") , "<" ) );

$a = !empty($param[0]) ? $param[0] : null;
$b = !empty($param[1]) ? $param[1] : null;
$c = !empty($param[2]) ? $param[2] : null;

if (class_exists($type))
{
$obj = new $type($a, $b, $c);
echo $obj -> out();
}
}



Цитата

Фигура 1 : Квадрат имеет периметр 208 и площадь 2704;
Фигура 2 : Квадрат имеет периметр 64 и площадь 256;
Фигура 3 : Квадрат имеет периметр 96 и площадь 576;
Фигура 4 : Круг имеет периметр 238.64 и площадь 4534.16;
Фигура 5 : Круг имеет периметр 69.08 и площадь 379.94;
Фигура 6 : Круг имеет периметр 150.72 и площадь 1808.64;
Фигура 7 : Треугольник имеет периметр 23 и площадь 60.366070768272;
Фигура 8 : невероятная имеет периметр невероятный и площадь невероятную;
Фигура 9 : невероятная имеет периметр невероятный и площадь невероятную;
Фигура 10 : Круг имеет периметр 615.44 и площадь 30156.56;
Фигура 11 : Треугольник имеет периметр 170 и площадь 2949.8940658946;


Это сообщение отредактировал casper - gg - 5.12.2015 - 22:42
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
casper - gg  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Пользователь
Сообщений: 216
Пользователь №: 42190
На форуме: 1 год, 2 дня
Карма: 10




По горячим следам... то есть где б такое можно применить было...

абстрактная форма или конструктор форм


... вот бывает..., часто бывает, лень формы корректно составлять, да и вообще лень их составлять, особенно в инфейсе админа, а делать это нужно все таки. Вот такой вот "велосипед" (у кого получше - не жадничай, поделись)


class Form_Model
{
public $tpl = ''; // шаблон формы
public $bbtag; // шаблон псевдотегов

public $size_inp = 80; // длина поля input в символах
public $size_col = 82; // длина поля textarea в символах
public $size_row = 8; // количество рядов поля textarea
public $required = 'required'; // фильтр html5

public $form_action = ''; // путь к скрипту (или имя файла) обработчика формы
public $form_name = 'form'; // имя формы
public $form_method = 'post'; // метод отправки данных
public $form_enctype = 'multipart/form-data'; // очень сложный параметр

/**
* Метод установки полей типа input
*/

public function setInput($type, $id, $header, $name, $value='')
{
$this->tpl .=
'
<p>
'
.$this->help_butt.'
<label for="'
. $id .'"> '. $header .' '.$this->help_note.' </label>
<input type="'
.$type.'" id="'.$id.'" name="'.$name.'" size="'.$this->size_inp.'" value="'.$value.'" placeholder="'.$header.'" '.$this->required.' />
</p>
'
;

$this->setHelp(null, null);
}

/**
* Метод установки полей типа textarea
*/

public function setTextarea($id, $header, $name, $value)
{
$this->tpl .=
'
<p>
'
.$this->help_butt.'
<label for="'
.$id.'"> '.$header.' '.$this->help_note.' </label>
<div class="bbtag">'
.$this->bbtag.'</div>
<textarea id="'
.$id.'" name="'.$name.'" cols="'.$this->size_col.'" rows="'.$this->size_row.'">'.$value.'</textarea>
</p>
'
;

$this->setHelp(null, null);
}

/**
* Метод установки кнопок
*/

public function setButton($name, $value)
{
$this->tpl .=
'
<p>
<input class="butt" type="submit" name="'
.$name.'" value="'.$value.'" />
</p>
'
;
}

/**
* Метод дополнения полей формы подсказками
*/

public function setHelp($id, $note)
{
$this->help_butt = '<input class="butt" type="button" value="Подсказка" onclick="blockList("'.$id.'")" />';
$this->help_note = '<div class="note" id="'.$id.'" style="display: block;"> '.$note.' </div>';
}

/**
* Метод завершения формирования шаблона формы и отправки ее в скрипт
*/

public function outForm()
{
return
'
<form action="'
.$this->form_action.'" name="'.$this->form_name.'" method="'.$this->form_method.'" enctype="'.$this->form_enctype.'" >
'
. $this->tpl .'
</form>
'
;
}

}


class Form_Reg extends Form_Model
{

//* ------------------------------------------------------------------------------------
//* Класс формирования формы регистрации пользователей (наследник конструктора форм)
//* ------------------------------------------------------------------------------------
//* ------------------------------------------------------------------------------------

/** Параметр $this->form_action задает путь (имя файла) обработчика формы */
//* ------------------------------------------------------------------------------------
/** Установка поля input:
* $this->setInput('text', 'title', 'headers', 'form[value1]', $var1);
* 1 (string) 'text' - тип поля input
* 2 (string) 'title' - id поля (параметр важен зачастую для js кода)
* 3 (string) 'headers' - подпись поля формы (так же испоьзуется подсказкой в самом поле)
* 4 (string) 'form[value1]' - имя для глобальной переменной
* 5 (string) $var1 - установка значения поля по умолчанию
*
* --------------------------------------------------------------------------------------
* Установка поля textarea:
* $this->setTextarea('texts', 'contetn pages', 'form[value2]', $var2);
* 1 (string) 'texts' - id элемента поля формы (параметр важен зачастую для js кода)
* 2 (string) 'contetn pages' - подпись поля формы (так же испоьзуется подсказкой в самом поле)
* 3 (string) 'form[value2]' - имя для глобальной переменной
* 4 (string) $var2 - установка значения поля по умолчанию
*
* --------------------------------------------------------------------------------------
* Установка кнопки:
* $this->setButton('add', 'записать стих');
* 1 (string) 'add' - задает имя (переменной) кнопки
* 2 (string) 'записать стих' - устанавливает надпись на кнопке
*
* --------------------------------------------------------------------------------------
* Установка подсказок (работает для полей input и textarea)
* Если необходимо отобразить подсказку к полю то нужно написать такую строку перед установкой поля
* $this-> setHelp('title', 'its not problems');
* 1 (string) 'title' - id поля подсказки (необходим как правило для js кода)
* 2 (string) 'its not problems' - содержание подсказки
*
* --------------------------------------------------------------------------------------
* Дополнительные настройки полей формы
* $this->size_inp = 90; - длина поля input
* $this->size_col = 92; - длина поля textarea
* $this->size_row = 10; - количество рядов поля textarea
* $this->required = ''; - отключение фильтра html5 (как правило для отладки приложения)
*
* --------------------------------------------------------------------------------------
* Стили формы
* html код формы построен с учетом возможности описания стиля формы, достаточного для
* позиционирования и яркого оформления простых и текстовых полей формы, кнопок формы,
* а так же подсказок и подписей формы
*
* --------------------------------------------------------------------------------------
* Вот так может выглядеть сформированная форма (достаточно читаемо, хотя и не сразу)
*
*
<form action="test" name="form" method="post" enctype="multipart/form-data" >
*
*
<p>
* <input class="butt" type="button" value="Подсказка" onclick="blockList("title")" />
* <label for="title"> headers <div class="note" id="title" style="display: block;"> its not problems </div> </label>
* <input type="text" id="title" name="form[value1]" size="80" value="Все не так" placeholder="headers" required />
* </p>
*
*
<p>
* <input class="butt" type="button" value="Подсказка" onclick="blockList("texts")" />
* <label for="texts"> contetn pages <div class="note" id="texts" style="display: block;"> its not problems too soft </div> </label>
* <div class="bbtag"></div>
* <textarea id="texts" name="form[value2]" cols="82" rows="8">А как же тогда наш работ</textarea>
* </p>
*
*
<p>
* <input class="butt" type="submit" name="add" value="записать стих" />
* </p>
*
*
</form>
*
* ---------------------------------------------------------------------------------------
* Примечание!
*
* В обычных и текстовых полях не предусотрена возможность отключения подписей этих полей
* так как, в случае отсутствия подписи, значимость привязки такого поля к его заполнению
* расплывается, словно предметы в тумане для некоторых пользователей.
*
* Данный конструктор форм, не является приложением к какой - либо системе управления кон-
* тентом, а служит всего - навсего удобным средством при проектировании множества различ-
* ных форм в любой (в том числе самописной) системы. Особено, когда таких форм может быть
* десятки, да к тому же в интерфейсе администратора, и над системой работает один человек
* то такой контсруктор может немного облегчить работу и избавить "писателя" от написания
* лишних строк html кода.
*/

//* ----------------------------------------------------------------------------------------------------- -----
//* ----------------------------------------------------------------------------------------------------- -----


/**
* Конструктор формы
* На входе принимает значения strung
* (в большинстве случаев используются как возвращенные значения при неполном или неудачном заполнении формы
*/

public function __construct($var1, $var2)
{
$this->form_action = 'test';

// $tag = new BBtag('bbtag'); - возможный вариант загрузки шаблона псевдоразметки
// $this->bbtag = $tag->parsTpl(); - подключение шаблона псевдоразметки к полю textarea

// Установка поля input с подсказкой

$this-> setHelp('title', 'its not problems');
$this-> setInput('text', 'title', 'headers', 'form[value1]', $var1);

// Установка поля textarea с подсказкой
$this-> setHelp('texts', 'its not problems too soft');
$this-> setTextarea('texts', 'contetn pages', 'form[value2]', $var2);

// Установка кнопки
$this-> setButton('add', 'записать стих');
}
}


$obj = new Form_Reg($POST['value1'], $POST['value2']); // запускаем конструктор формы
echo $obj->outForm(); // выводим результат на экран


PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
casper - gg  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Пользователь
Сообщений: 216
Пользователь №: 42190
На форуме: 1 год, 2 дня
Карма: 10




... и что мне не уймется user posted image

вот еще раз переписал задачку-то, уже почти по настоящему (может кому и пригодится):

новая версия решения задачи



<?php

class
Figures
{
private static $number = 0;

public static function getClass($params) // формируем строку
{
self::$number ++;

if(!is_string($params))
return new Error(self::$number .' эдесь нету ничего похожего на описание фигуры (это вообще не из этой оперы)');

$data = str_replace(array('<', '>'), '', $params);
$param = explode(' ', $data);

switch ($param[0])
{
case 'circle':
return new Circle($param[1]);
break;

case 'square':
return new Square($param[1]);
break;

case 'traingle':
return new Traingle($param[1], $param[2], $param[3]);
break;

default :
return new Error(self::$number .' не определена формула расчета фигуры или ошибка на входе (может нужно дописать новый класс)');
break;
}
}


protected function srting($type, $periphery, $area) // формируем строку расчета
{
$this->out = self::$number.'<span style="color:grey;"> Фигура </span> :
'
. $type .' имеет периметр '. $periphery .' и площадь '. $area .'; <br/>';
}

protected function error() // формируем строку ошибки
{
$this->out = self::$number.'<span style="color:red;"> Фигура :
имеет нереальные параметры или была допущена ошибка в описании фигуры; </span><br/>'
;
}

protected function perimetr() { } // расчет периметра фигуры
protected function area() { } // расчет площади фигуры
protected function out() { } // возвращение результата из класса
}

class Error extends Figures
{
public function perimetr() { }
public function area() { }
public function out() { }

public function error($err) // выдаем строку ошибки
{
echo '<span style="color:blue;">'. $err .'</span><br/>';
}
}


class Square extends Figures
{
public function __construct($side)
{
if((float)$side > 0)
{
$periphery = $this-> perimetr($side);
$area = $this-> area($side);
$this->srting('Квадрат', $periphery, $area);
}
else
$this->error();
}

public function perimetr($side)
{
return $side * 4;
}

public function area($side)
{
return $side * $side;
}

public function out()
{
return $this->out;
}
}


class Circle extends Figures
{
public function __construct($ray)
{
if((float)$ray > 0)
{
$pi=3.14;
$periphery = $this-> perimetr($ray, $pi);
$area = $this-> area($ray, $pi);
$this->srting('Круг', $periphery, $area);
}
else
$this->error();
}

public function perimetr($ray, $pi)
{
return $ray * $pi * 2;
}

public function area($ray, $pi)
{
return $ray * $ray * $pi;
}

public function out()
{
return $this->out;
}
}

class Traingle extends Figures
{
public function __construct($sideA, $sideB, $sideC)
{
$prop = ($sideA + $sideB + $sideC / 2);

if(!(float)$sideA || !(float)$sideB || !(float)$sideC)
$this->error();
if($sideA <= 0 || $sideB <= 0 || $sideC <= 0)
$this->error();
elseif($prop <= $sideA || $prop <= $sideB || $prop <= $sideC)
$this->error();
else
{
$periphery = $this-> perimetr($prop);
$area = $this-> area($sideA, $sideB, $sideC);
$this->srting('Треугольник', $periphery, $area);
}
}


public function perimetr($prop)
{
return $this->periph = $prop * 2;;
}

public function area($sideA, $sideB, $sideC)
{
$p = ( $this->periph / 2 );
$figure = $p * ( ($p - $sideA) * ($p - $sideB) * ($p - $sideC) );
return sqrt( $figure );
}

public function out()
{
return $this->out;
}
}


// Вместо файла

$file[] = '<square> <52>'; //1
$file[] = '<squaree> <16>'; //2
$file[] = '<square> <24>'; //3
$file[] = '<circle> <38>'; //4
$file[] = '<circle> <11>'; //5
$file[] = '<circle> <24>'; //6
$file[] = '<traingle> <4 5 5>'; //7
$file[] = '<square> <hr>'; //8
$file[] = '<traingle> <7 7 hr>'; //9
$file[] = '<circle> <98>'; //10
$file[] = '<traingle> <40 20 50>'; //11
$file[] = array('<traingle> <40 20 50>', '<circle> <98>'); //11

// формируем страницу


foreach($file as $figure)
{
$obj = Figures::getClass($figure);
echo $obj -> out();
}



PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
new_eva  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 2
Пользователь №: 42498
На форуме: 10 месяцев
Карма:




Изучаю понемногу. Вот что получилось:

header("Content-Type: text/html; charset=utf-8");
abstract class Figure{
public $area;
public $perimeter;

function __construct (){
$this->area = $this->getArea();
$this->perimeter = $this->getPerimeter();
}
abstract public function getArea();
abstract public function getPerimeter();
abstract public function printText();
}

class Circle extends Figure{
private $radius;

public function __construct($n){
if ($n<=0) {$n=1;}
$this->radius = $n;
parent::__construct();
}
public function getArea(){
return M_PI * pow($this->radius, 2);
}
public function getPerimeter(){
return 2 * M_PI * $this->radius;
}
public function printText(){
return 'Фигура: круг (радиус: '.$this->radius.')';
}
}


class Rectangle extends Figure{
private $a;
private $b;

public function __construct($a, $b){
if ($a<=0) {$a=1;}
if ($b<=0) {$b=1;}
$this->a = $a;
$this->b = $b;
parent::__construct();
}
public function getArea(){
return $this->a * $this->b;
}
public function getPerimeter(){
return 2 * ($this->a + $this->b);
}
public function printText(){
return 'Фигура: прямоугольник (cторона 1: '.$this->a.', cторона 2: '.$this->b.')';
}
}


class Triangle extends Figure{
private $a;
private $b;
private $angle;

public function __construct($a, $b, $angle){
if ($a<=0) {$a=1;}
if ($b<=0) {$b=1;}
if ($angle<=0) {$angle = 45;}
$this->a = $a;
$this->b = $b;
$this->angle = $angle;
parent::__construct();
}
public function getArea(){
return 0.5 * $this->a * $this->b * sin(deg2rad($this->angle));
}
public function getPerimeter(){
return $this->a + $this->b + sqrt(pow($this->a, 2) + pow($this->b, 2) - 2 * $this->a * $this->b * cos(deg2rad($this->angle)));
}
public function printText(){
return 'Фигура: треугольник (cторона 1: '.$this->a.', cторона 2: '.$this->b.', угол между ними: '.$this->angle.')';
}
}


class FigureFactory{
private $figClass;

public function __construct($txt){
$arrText = explode(" ", $txt);
switch ($arrText[0]){
case 'circle' :
$this->figClass = new circle ($arrText[1]);
break;
case 'rectangle':
$this->figClass = new rectangle ($arrText[1], $arrText[2]);
break;
case 'triangle':
$this->figClass = new triangle ($arrText[1], $arrText[2], $arrText[3]);
break;
default:
$this->figClass = new circle ($arrText[1]);
break;
}
}

public function getArea(){
return $this->figClass->getArea();
}
public function getPerimeter(){
return $this->figClass->getPerimeter();
}
public function printText(){
return '<p>'.$this->figClass->printText().'<br>Площадь: '.$this->figClass->area.'<br>Периметр: '.$this->figClass->perimeter.'</p>';;
}
}



$figure_text = array(
'circle 5',
'rectangle 4 9',
'triangle 3 2 45',
'circle 12.5',
'rectangle 2.9 9.4',
'triangle 15 7 60',
'circle 7.3',
'rectangle 9.8 9.8',
'triangle 6.4 5.3 35',
'circle f',
'rectangle 4 9',
'triangle 3 2 45'
);

$figure_array = array();

foreach ($figure_text as $str){
$figure_array[] = new figureFactory($str);
}
print count($figure_array);
foreach ($figure_array as $fig){
print $fig->printText();
}


Результат:
Фигура: круг (радиус: 5)
Площадь: 78.539816339745
Периметр: 31.415926535898

Фигура: прямоугольник (cторона 1: 4, cторона 2: 9)
Площадь: 36
Периметр: 26

Фигура: треугольник (cторона 1: 3, cторона 2: 2, угол между ними: 45)
Площадь: 2.1213203435596
Периметр: 7.1247867247706

Фигура: круг (радиус: 12.5)
Площадь: 490.87385212341
Периметр: 78.539816339745

Фигура: прямоугольник (cторона 1: 2.9, cторона 2: 9.4)
Площадь: 27.26
Периметр: 24.6

Фигура: треугольник (cторона 1: 15, cторона 2: 7, угол между ними: 60)
Площадь: 45.466333698683
Периметр: 35

Фигура: круг (радиус: 7.3)
Площадь: 167.4154725098
Периметр: 45.867252742411

Фигура: прямоугольник (cторона 1: 9.8, cторона 2: 9.8)
Площадь: 96.04
Периметр: 39.2

Фигура: треугольник (cторона 1: 6.4, cторона 2: 5.3, угол между ними: 35)
Площадь: 9.7278563605137
Периметр: 15.371338354801

Фигура: круг (радиус: 1)
Площадь: 3.1415926535898
Периметр: 6.2831853071796

Фигура: прямоугольник (cторона 1: 4, cторона 2: 9)
Площадь: 36
Периметр: 26

Фигура: треугольник (cторона 1: 3, cторона 2: 2, угол между ними: 45)
Площадь: 2.1213203435596
Периметр: 7.1247867247706


Это сообщение отредактировал new_eva - 6.04.2016 - 07:38
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) 1 [2]  Ответ в темуСоздание новой темыСоздание опроса