• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

przypisywanie danych z tablicy do zmiennej o nazwie klucza tablic <-- czemu nikt mnie nie poinformował że tak można? ;)

Object Storage Arubacloud
0 głosów
363 wizyt
pytanie zadane 16 sierpnia 2015 w PHP przez makoso Mądrala (7,380 p.)

dzisiaj pisząc klasę wyszła mi fajna funkcja wstawiam tylko kawałek który mi się spodobał nie sądziłem że to zadziała spróbowałem i zdziwienie :) poniżej kod  funkcja upbuild :)

co polecacie zmienić w ogólnej strukturze klasy(jeszcze nie dokończona) ale na wykończeniu :)

 

wydaje mi się że poprawiłem swój styl pisania klas ale pewien nie jestem :)
 

class builds
{
    private $db;
    private $user;
    private $id;
    var $build;

    function __construct(\PDO $db, $user, $id, $build)
    {
        $this->db = $db;
        $this->id = $id;
        $this->build = $build;
        $this->user = new user_info($this->db = $db, $this->id = $id);
    }


    function getLvl()
    {

        $lvl = $this->user->builds->{$this->build} + 1;
        return $lvl;
    }

    function GetInfo()
    {
        $query = $this->db->prepare("**** ");
        $query->bindParam(1, $this->build, PDO::PARAM_STR);
        $query->bindParam(2, $this->getLvl(), PDO::PARAM_INT);
        $query->execute();
        $object = $query->fetch(PDO::FETCH_OBJ);
        return $object;
    }

    function GetCost()
    {
        $object = $this->GetInfo();
        $info['wood'] = $object->cost_wood;
        $info['stone'] = $object->cost_stone;
        $info['iron'] = $object->cost_iron;
        $info['gold'] = $object->cost_gold;
        $info['time'] = $object->cost_time;
        return $info;
    }

    function GetReqementes()
    {
        $object = $this->GetInfo();
        $info = unserialize($object->cost_builds);
        return $info;
    }

    function ChekRequementes()
    {
        $array = $this->GetReqementes();
        if (!empty($array)) {
            foreach ($array AS $val) {
                if ($this->user->builds->{$val['build']} >= $val['lvl']) {
                    return true;
                } else {
                    return false;
                }
            }
        } else {
            return false;
        }
        return false;
    }

    function ChekResources($dataUser, $dataSys)
    {
        if ($dataUser >= $dataSys) {
            $calc = $dataUser - $dataSys;
            return $calc;
        } else {
            return false;
        }
    }

    function upbuild()
    {
        if ($this->ChekRequementes()) {
            $Cost = $this->GetCost();
            $lvl = $this->getLvl();
            $a = array();
            $table = array(1 => 'wood',
                2 => 'stone',
                3 => 'iron',
                4 => 'gold',
                5 => 'time');
            foreach ($table AS $res) {
                if ($res != 'time') {
                    ${$res} = $this->ChekResources($this->user->resources->{$res}, $Cost[$res]);
                    $a[$res] = ${$res};
                }
            }
            return $a;


        } else {
            return false;
        }
    }
}

 

2 odpowiedzi

0 głosów
odpowiedź 16 sierpnia 2015 przez Boshi VIP (100,240 p.)
A  co mamy ci pisać na pw, że można tak i tak? .. lol  Co widzisz dziwnego w tym, że  przepisujesz z jednej tablicy do drugiej używając wartości jako klucza? do tego są gotowe funkcje w php...

http://php.net/manual/pl/function.array-flip.php

Klucze stają się wartościami tablicy, wystarczy dopisać do nowej tablicy i masz to samo...
komentarz 16 sierpnia 2015 przez makoso Mądrala (7,380 p.)

w temacie była ironia -.- poprostu byłem zadowolony że udało mi sie coś zrobić i chodziło mi głównie o zapis

${$res}

chodzi o to że nie wiedziałem że moge automatycznie tworzyć zmienne o ile dobrze to określam.

0 głosów
odpowiedź 16 sierpnia 2015 przez Comandeer Guru (601,450 p.)

Nie podoba mi się, że metody zwracają różne typy danych w zależności od kontekstu, np calc - zawsze powinna zwracać liczbę.

A np checkRequirements (tak, masz błąd w nazwie :P) da się zapisać o wiele krócej i prościej:

function CheckRequirements()
{
	$array = $this->GetRequirements(); //ta metoda zwraca tablicę - jak nie ma wymagań, to zwraca pustą

	foreach($array AS $val)
	{
		if($this->user->builds->{$val['build']} >= $val['lvl'])
			return true;
	}

	return false;
}

Jak już stosujesz DI, stosuj w pełni ;) Skoro konstruktor bierze PDO, niech bierze także User_Info

komentarz 16 sierpnia 2015 przez makoso Mądrala (7,380 p.)

miałem zapisane aby brał też klasę User_info :) ale zrezygnowałem nie wiem czemu ;)

a co do funkcji CheckRequirements()  i GetRequirements() <-- nazwy poprawię później :)

to zawsze mają tablicę ( tak już zapisałem w bazie) a na wszelki wypadek błedów dałem że może być pusta :)

mam pytanie w przy tworzeniu klasy user_info wsadziłem do konstruktora dane takim zapisem:

$this->db = $db

a powinienem użyć 

$this->db 

co zmienia jeden zapis od drugiego bo zawsze mnie nurtuje pytanie jak widzę klasy mają zapisane w funkcjach 

($dane = null, $cos= null)

czy to oznacza że mogę jeżeli wstawię dane to będa miały tą wartość a jak nie to przyjmie wartość null i nie wypluje błędów?

jeszcze co do calc to musiałbym zwracać 0 a jezeli zero to chcę zachować true,ew mógłbym zwracać -1, i by działało tak jak się uparłem na to :)

komentarz 16 sierpnia 2015 przez Comandeer Guru (601,450 p.)
Nom, to właśnie to oznacza.
komentarz 16 sierpnia 2015 przez Boshi VIP (100,240 p.)
Jeszcze jedno, jeżeli metody które wywołujesz wewnątrz klasy są tylko na potrzeby klasy to daj im etykietę private. Po co mają być dostępne publicznie skoro obiekt nie będzie musiał z tego korzystać?

Chyba,że je wywołujesz na rzecz konkretnego obiektu to zostaw jak jest.
komentarz 16 sierpnia 2015 przez makoso Mądrala (7,380 p.)
3/4 wywołuję wewnątrz clasy więc pewnie tak zrobię 1/4 na public będzie musiałab być
komentarz 16 sierpnia 2015 przez Comandeer Guru (601,450 p.)
Zasada kciuka brzmi: publiczne metody powinny być jedynie API klasy, Cała reszta to metody prywatne (względnie protected, jeśli pozwalamy na dziedziczenie).

Podobne pytania

0 głosów
2 odpowiedzi 1,368 wizyt
pytanie zadane 22 sierpnia 2020 w Java przez Bakkit Dyskutant (7,600 p.)
0 głosów
3 odpowiedzi 433 wizyt
pytanie zadane 25 października 2015 w PHP przez babiak Obywatel (1,810 p.)
0 głosów
2 odpowiedzi 184 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...