user767
10.07.2011, 04:49:42
Proszę o pomoc, bo nie działa zapisywanie do tablicy błędów w klasie.
Nie mam kodu, ale poproszę o pomoc na przykładzie (może błąd tkwi w definicji ?)
class Klasa{
public function CheckOne($zmienna1,$zmienna2){
if() {
}
else {$this->errors[] = "Źle !!!<br />"; }
}
public function CheckTwo($zmienna1,$zmienna2){
if() {
}
else {$this->errors[] = "Też niedobrze !!!<br />"; }
}
public function Errors($errors){
print "są bledy:"; // tu bym wypisał jakie }
}
};
$validate = new Klasa;
$validate->CheckOne('123',$tablica['element']);
$validate->CheckTwo('123',$tablica['element']);
$validate->Errors($errors);
Tej tablicy nie ma, a jak chcę ją zresetować pisze odwołanie do nieistniejącej tablicy, obiektu.
mortus
10.07.2011, 07:16:02
Zauważ, że Twoja funkcja
Errors() przyjmuje parametr
$errors, a tymczasem błędy zostały już w odpowiedniej zmiennej w klasie zapisane. Funkcja
Errors() powinna zatem korzystać z istniejącej już w tej klasie tablicy błędów, czyli:
public function Errors() {
if(count($this->errors) > 0
) { }
}
// ...
$validate->Errors();
user767
10.07.2011, 13:25:51
Zastanawiam się nad odebraniem danych z formularza post w konstruktorze, jak to wykonać ? Normalnie odbierałem dane tak jak kod pokazuje - poza klasą.
$tablica = ($_POST);
class abc(
function __construct(){
// tutaj chciałbym odebrać dane z tablicy i używać ich wewnątrz klasy
}
public function nazwa1(){
//
}
};
muk4
10.07.2011, 13:28:59
$_POST jest tablicą superglobalną więc możesz jej użyć wewnątrz metody.
user767
10.07.2011, 13:42:19
Jak odwołać się do takiej tablicy w kodzie ?
$this->tablica['subject']
nie działa
Daiquiri
10.07.2011, 13:55:36
$_POST['subject']; albo przekazać tablicę jako parametr.
class abc
{
private $arrPost = array();
public function __construct($arr)
{
$this->arrPost = $arr;
}
public function returnPost()
{
return $this->arrPost['subject'];
}
}
user767
10.07.2011, 14:42:12
Do arrPost chciałbym wczytać już przy deklaracji przesłane przez POST dane, z ($_POST); bez określania elementów tablicy.
Daiquiri
10.07.2011, 14:55:43
Nie bardzo rozumiem. Przecież możesz wrzucić całą tablicę, tak jak jest to w konstruktorze z mojego przykładu (nie musisz korzystać ze zmiennej $arr, możesz przesłać dowolną tablicę, w tym $_POST). Jeżeli nie chcesz przekazywać tego jako parametr to korzystasz z $_POST po prostu. Opcjonalnie możesz pojedyncze elementy wrzucać do klasy, korzystając z czegoś na kształt __get i __set.
user767
10.07.2011, 14:59:20
private $arrPost = array($_POST); private $arrPost = ($_POST);
niestety nie działa, błąd w tej samej linii
Daiquiri
10.07.2011, 15:04:51
No przecież masz napisane wyżej $this->$arrPost = to co chcesz przypisać... Jeżeli masz to w konstruktorze to $zmienna = new abc($_POST). Wtedy:
class abc
{
private $arrPost = array();
public function __construct($arr)
{
$this->arrPost = $arr;
}
}
user767
10.07.2011, 15:32:47
private $dataPost = array();
public function __construct(){
$this->dataPost = ($_POST);
}
w ten sposób
Za to odwołanie nie bardzo działa
$validate->AddValidator('subject',$this->dataPost['subject']);
$this nie jest obiektem
Daiquiri
10.07.2011, 15:40:04
Pokaż klasę, której obiektem jest validate, wraz z metodą AddValidator. $this->zmienna będzie, w tym przypadku, działać tylko wewnątrz klasy.
user767
10.07.2011, 15:42:54
jest:
$validate->AddValidator('subject',$validate->dataPost['subject']);
więcej nie napiszę, sami pogłówkujcie
Daiquiri
10.07.2011, 15:46:30
No to ciężko Ci będzie pomóc, skoro nie wiem nawet co robisz. Nie wiem przecież jakie parametry ma przyjmować AddValidator. $this->dataPost będzie funkcjonować wewnątrz klasy, w której masz taką zmienną. Przecież to Ty potrzebujesz pomocy, a nie my.
user767
10.07.2011, 16:34:53
Ale popatrz z tej strony, to podstawy, ja jestem zmęczony, noc nie spałem.
Znam php strukturalnie dosyć dobrze, żeby przejść na obiektowy język.
Dzięki za pomoc!
Daiquiri
10.07.2011, 16:56:44
Tylko na podstawie czego mam Ci pomóc? Ogólnikami już rzuciłam, a Ty nawet nie napisałes jakiego typu parametry ma przyjąć metoda AddValidator i czy ten obiekt($validate) znajduje się wewnątrz klasy, w której zdefiniowałeś zmienną prywatną dataPost.
user767
10.07.2011, 23:16:12
typ do swith i daną
class abc{
public $dataPost = array();
public function __construct{
$this->dataPost = ($_POST);
//
}
public funkcja1($a,$b) { // }
};
$validate = new abc;
$validate=funkcja1('1',$validate->dataPost['subject']);
$validate=funkcja1('2',$validate->dataPost['content']);
//
Daiquiri
11.07.2011, 08:28:10
$_POST['subject'] = 'subject';
$_POST['content'] = 'content';
class abc
{
public $dataPost = array();
public function __construct()
{
$this->dataPost = ($_POST);
}
public function funkcja1($a,$b)
{
}
}
$validate = new abc;
$validate->funkcja1('1',$validate->dataPost['subject']);
$validate->funkcja1('2',$validate->dataPost['content']);
Teraz będzie śmigać. Warto pomyśleć o metodach dostępowych, zamiast bezpośrednich odwołań do zmiennych publicznych.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.