| Autor | Zpráva | ||
|---|---|---|---|
| leedsU Profil * |
#1 · Zasláno: 22. 12. 2008, 12:27:04
Ahoj, prosím o názor,
1) vypisování echo nebo print se má provádět ve scriptu vlastní třídy (v metodě public function neco { $this->prom = 'Ahoj'; echo $this->prom; }) nebo ve scriptu, který si třídu podle potřeby volá? $g = new Novatrida; echo $g->neco; 2) musí být vždy u třídy definován __construct? |
||
| Měsíček Profil |
#2 · Zasláno: 22. 12. 2008, 12:29:11
1.) Je to na tobě.
2.) Nemusí. |
||
| leedsU Profil * |
#3 · Zasláno: 22. 12. 2008, 12:31:39
Díky, zatím mi přijde, že všechno co dělám v oop jde udělat i funkcemi :)
|
||
| Mastodont Profil |
#4 · Zasláno: 22. 12. 2008, 12:51:44
Dá, ale někdy je to komplikovanější, hlavně u dědičnosti.
|
||
| leedsU Profil * |
#5 · Zasláno: 22. 12. 2008, 13:03:10
Řekněme, že se teď v rámci nauky OOP PHP snažím napsat třídu pro vytvoření základního html rozhraní, zatím mi to přijde jako tvoření šablony:
<?php
class Html_page {
private $html;
private $keywords;
private $description;
private $robots;
private $charset;
private $title;
private $css;
private $js;
private $layout;
private $lang = array(1=>'english', 'czech', 'germany', 'denmark', 'espanol', 'finland', 'france', 'greece', 'hungary', 'israel', 'italy', 'japan', 'korea', 'holland', 'norway', 'poland', 'portugal', 'russia', 'sweden');
private $language;
const AUTHOR = "www@gmail.com";
const CASE_CONTROL = "no-cache";
const PRAGMA = "no-cache";
const EXPIRES = "-1";
const CHARSET = "text/html; charset=utf-8";
public function __construct () {
// nastavení jazyka stránky
if(isset($_COOKIE['l']) && !isset($_GET['l'])) {
if(in_array($_COOKIE['l'], $this->lang))
{
$this->language = $_COOKIE['l'];
}
else {
$this->language = 'english';
setcookie('l', 'english', time()+180*24*60*60);
}
}
if (!isset($_COOKIE['l']) && !isset($_GET['l'])) {
$this->language = 'english';
setcookie('l', 'english', time()+180*24*60*60);
}
if(isset($_GET['l'])) {
session_destroy();
/*if(!in_array($_GET['l'], $this->lang)) {
$this->language = 'english';
setcookie('l', 'english', time()+180*24*60*60);
}
else {
$this->language = $_GET['l'];
setcookie('l', $_GET['l'], time()+180*24*60*60);
} */
$this->language = 'english';
setcookie('l', 'english', time()+180*24*60*60);
}
}
function keyws($keyw) {
if(isset($keyw)) {
$this->keywords = $keyw;
}
}
function descr($descr) {
if(isset($descr)) {
$this->description = $descr;
}
}
function robot($robot) {
if(isset($robot)) {
$this->robots = $robot;
}
}
function title($title) {
if(isset($title)) {
$this->title = $title;
}
}
public function html_start() {
$this->html = '<?xml version="1.0"?>'."\n";
$this->html .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">'."\n";
$this->html .= '<head>'."\n";
$this->html .= '<meta name="keywords" content="'.$this->keywords.'" />'."\n";
$this->html .= '<meta name="description" content="'.$this->description.'" />'."\n";
$this->html .= '<meta name="author" content="'.self::AUTHOR.'" />'."\n";
$this->html .= '<meta name="robots" content="'.$this->robots.'" />'."\n";
$this->html .= '<meta http-equiv="Cache-Control" content="'.self::CASE_CONTROL.'" />'."\n";
$this->html .= '<meta http-equiv="Pragma" content="'.self::CASE_CONTROL.'" />'."\n";
$this->html .= '<meta http-equiv="Expires" content="'.self::PRAGMA.'" />'."\n";
$this->html .= '<meta http-equiv="Content-Type" content="'.self::CHARSET.'" />'."\n";
$this->html .= '<link href=".'.dirname($_SERVER['PHP_SELF']).'/css/style.css" rel="stylesheet" type="text/css" />'."\n";
$this->html .= '<script src=".'.dirname($_SERVER['PHP_SELF']).'/js/script.js" type="text/javascript"></script>'."\n";
$this->html .= '<title>'.$this->title.'</title>'."\n";
$this->html .= '</head>'."\n";
$this->html .= '<body>'."\n";
echo $this->html;
}
public function html_end() {
$this->html = '</body>'."\n";
$this->html .= '</html>'."\n";
echo $this->html;
}
}
?>Je funkce html_start() napsaná dobře? Zdá se mi, že by tam nemuselo být pokaždé $this->html .= ale stačilo by echo. Tak mám jednoduchou stránku, ale to přeci člo napsat ve funkcích procedurálně, proč to psát takhle s ohledem do budoucna, jak bych mohl dál využít dědičnosti? |
||
| leedsU Profil * |
#6 · Zasláno: 22. 12. 2008, 13:03:44
ještě volání:
<?php
require_once 'html_page.php';
require_once '../class/scripts.php';
$html = new Html_page();
$html->descr(utf8String('Strána s testovacím rozhraním třídy Html_page'));
$html->keyws(utf8String('Stránka, test, rozhraní'));
$html->robot('All');
$html->title(utf8String('Vítejte na úvodní stránce'));
$html->html_start();
$html->html_end();
?> |
||
| Timy Profil |
#7 · Zasláno: 22. 12. 2008, 13:12:59
leedsU
ad 1) Třída se má starat buď o zpracovávání informací nebo o jejich výpis. Slučovat to do jedné třídy není pěkné, asi jako míchat sémantické a formátovací prvky v HTML. |
||
| Mastodont Profil |
#8 · Zasláno: 22. 12. 2008, 13:15:20 · Upravil/a: Mastodont
leedsU
Tohle je krásný příklad toho, jak by se objekty používat neměly - je to IMHO mnohem pomalejší než načíst šablonu a vyplivnout dopředu načtené bloky a HEAD do jejího obsahu. |
||
| leedsU Profil * |
#9 · Zasláno: 22. 12. 2008, 13:16:27
„leedsU“
„ad 1)“ „Třída se má starat buď o zpracovávání informací nebo o jejich výpis. Slučovat to do jedné třídy není pěkné, asi jako míchat sémantické a formátovací prvky v HTML.“ Myslíš předpokládám toto: public function neco {
$this->prom = 'Ahoj';
echo $this->prom;
} správně tedy jen: public function neco {
$this->prom = 'Ahoj';
return $this->prom;
}Můžeš prosím uvést příklad na třídu, která zpracovává informace a která se stará o výpisy? |
||
| Mastodont Profil |
#10 · Zasláno: 22. 12. 2008, 13:57:55
Mmch, co dělá funkce utf8String? Nebylo by jednodušší ukládat zdrojáky přímo v UTF-8?
|
||
| leedsU Profil * |
#11 · Zasláno: 22. 12. 2008, 14:19:32
function utf8String($string) {
if(isset($string)) {
return iconv("cp1250", "utf-8", $string);
}
} |
||
|
Časová prodleva: 18 let
|
|||
0