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

PHP - funkcja z dwiema zmiennym, strtoupper, strtolower

Object Storage Arubacloud
0 głosów
212 wizyt
pytanie zadane 2 września 2020 w PHP przez vingilot85 Obywatel (1,150 p.)

Ucze się PHP z podręcznika Mariusza Duki.
Czy może mi ktoś wyjaśnić, dlaczego poniższy kod nie daje wyniku? Jednocześnie nie wyskakuje błąd, tylko obydwa wyniki pojawiają się w oryginalnej pisowni

<?php
//napisać program z dwiema funkcjami. Pierwsza ma wydrukować dowolny text małyml literami
//druga funkcja wydrukuje ten sam text wielkimi literami

function drukuj($text = "", $litery = true)
{
    echo $text;
    if($litery == true)
    {
        $text = mb_strtoupper($text); 
    }
    if($litery == false)
    {
        $text = mb_strtolower($text);
    }
}

drukuj("Lubię PROGRAMOWAĆ, ale jeszcze bardziej lubię WAKACJE \n", false);
drukuj("Lubię PROGRAMOWAĆ, ale jeszcze bardziej lubię WAKACJE", true);
?>

Z góry dzięki

3 odpowiedzi

+3 głosów
odpowiedź 2 września 2020 przez Bizuma Gaduła (3,650 p.)
wybrane 3 września 2020 przez Arkadiusz Waluk
 
Najlepsza

Zwróć uwagę, że "echo" (wypisanie) jest na początku twojej funkcji, zanim jeszcze wykonasz na swoim tekście jakiekolwiek operacje.

Jedyne co musisz zrobić to przenieść "echo $text" na koniec funkcji ;)

O tak:

<?php
//napisać program z dwiema funkcjami. Pierwsza ma wydrukować dowolny text małyml literami
//druga funkcja wydrukuje ten sam text wielkimi literami
 
function drukuj($text = "", $litery = true)
{
   
    if($litery == true)
    {
        $text = mb_strtoupper($text); 
    }
    if($litery == false)
    {
        $text = mb_strtolower($text);
    }
 echo $text;
}
 
drukuj("Lubię PROGRAMOWAĆ, ale jeszcze bardziej lubię WAKACJE \n", false);
drukuj("Lubię PROGRAMOWAĆ, ale jeszcze bardziej lubię WAKACJE", true);
?>

 

komentarz 2 września 2020 przez vingilot85 Obywatel (1,150 p.)
Faktycznie, działa. Dzieki!
komentarz 2 września 2020 przez vingilot85 Obywatel (1,150 p.)

Tylko zastanawiam się, dlaczego we wcześniejszym przykładzie, owo echo powinno występować przed zdefiniowaniem warunku. Mógłbym prosić o wyjaśnienie

<?php
//definicja funckji z 2 argumentami
//każdy argument ma ustaloną wartość domyślną
function drukuj($text = "", $nowa_linia = true)
{
    echo $text;
    if($nowa_linia == true)
    {
        echo PHP_EOL; 
    }
   
}

drukuj("Lubię ", false);
drukuj("programować!");
drukuj();
drukuj("Ale lubię też wakacje!");
?>

?
 

komentarz 2 września 2020 przez Bizuma Gaduła (3,650 p.)
Myślę, że problem polega tutaj na nazwach tych dwóch funkcji. Może cię to mylić.

To co teraz pokazałeś robi coś zupełnie innego, mianowicie:

wypisuje podany w argumencie tekst, a następnie, zależnie od drugiego parametru wypisuje znak końca linii, lub nie.

oto co robi ta funkcja:

>wypisanie tekstu (dlatego echo jest pierwsze)

>opcjonalne wypisanie znaku nowej linii ( echo PHP_EOL; )

 

Natomiast ZAŁOŻENIA funkcji, o którą zapytałeś w pierwszym pytaniu są inne:

>zmiana wielkości liter

>wypisanie tekstu po zmianie wielkości liter

 

Jeżeli zostawimy echo na początku ( tak jak pokazałeś to zadając pytanie) to nasze operacje będą wyglądać tak:

>wypisanie tekstu ( zanim jeszcze cokolwiek na nim zrobimy )

>zmiana wielkości liter ( zmieniamy wielkość liter, mamy to zachowane w pamięci, ale nic z tym nie robimy, nigdzie nie wypisujemy )
komentarz 2 września 2020 przez vingilot85 Obywatel (1,150 p.)
Teraz rozumiem. Dziękuję za pomoc:)
+3 głosów
odpowiedź 3 września 2020 przez Assasz Nałogowiec (30,460 p.)

Problem zapewne rozwiązany, ale dodam coś od siebie.

Przede wszystkim nie wykonałeś polecenia - miałeś napisać dwie funkcje, nie jedną ;) Tym samym złamałeś podstawową zasadę programowania obiektowego - SRP (Single Responsibility Principle). Dlatego zaproponuję moje rozwiązanie:

function printInLowerCase(string $text): void
{
    echo mb_strtolower($text);
}

function printInUpperCase(string $text): void
{
    echo mb_strtoupper($text);
}

Obie funkcje są bezsensowne, bo jedynie opakowują wbudowane funkcje PHP, ale czemu nie ;)

komentarz 3 września 2020 przez vingilot85 Obywatel (1,150 p.)
Potestuję, dzięki!
0 głosów
odpowiedź 2 września 2020 przez senpai desu Mądrala (5,720 p.)
Hej

echo $text; dodaj też jako ostatni wiersz tej funkcji
komentarz 2 września 2020 przez vingilot85 Obywatel (1,150 p.)
Faktycznie, działa. Dzieki!

Podobne pytania

+1 głos
0 odpowiedzi 194 wizyt
0 głosów
1 odpowiedź 1,750 wizyt
pytanie zadane 20 kwietnia 2018 w JavaScript przez xxx1990 Początkujący (490 p.)
–2 głosów
1 odpowiedź 168 wizyt
pytanie zadane 8 stycznia 2017 w C i C++ przez Barteck125 Obywatel (1,120 p.)

92,568 zapytań

141,422 odpowiedzi

319,638 komentarzy

61,957 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!

...