Chattiga avsnitt php. Bitrix - Hur man bygger navigering för sektioner och undersektioner


Oavsett hur mycket vi använder PHP, dyker fortfarande vissa funktioner upp som vi aldrig ens har hört talas om. Några av dem skulle vara mycket användbara för oss. Jag skapade en liten lista användbara funktioner, som borde finnas i alla PHP-programmerares arsenal.

1. Skapa funktioner med ett variabelt antal argument

Troligtvis vet du redan att PHP tillåter oss att skapa funktioner med valfria argument. Nu ska jag visa en funktion där antalet argument kan variera från fall till fall.

Men först, låt oss komma ihåg hur vi skapar funktioner på vanligt sätt:

// funktion med två valfria parametrar function foo($arg1 = "", $arg2 = "") ( echo "arg1: $arg1\n"; echo "arg2: $arg2\n"; ) foo("hej", "värld"); /* kommer att skriva ut: arg1: hej arg2: värld */ foo(); /* kommer att mata ut: arg1: arg2: */

Låt oss nu titta på hur du kan skriva en funktion med ett obegränsat antal argument. För att göra detta kommer metoden func_get_args() att användas:

// specificera inte argument funktion foo() ( // returnerar en array av godkända argument $args = func_get_args(); foreach ($args som $k => $v) (eko "arg".($k+1) ." : $v\n"; ) ) foo(); /* kommer inte att mata ut något */ foo("hej"); /* kommer att skriva ut arg1: hej */ foo("hej", "värld", "igen"); /* kommer att skriva ut arg1: hej arg2: världen arg3: igen */

2. Använd Glob() för att söka efter filer

Ofta talar namnen på funktioner för sig själva. Detsamma kan inte sägas om glob()-funktionen.

Utan att gå in på för mycket detaljer, liknar dess funktionalitet scandir()-metoden. Det låter dig hitta nödvändig fil enligt mallen:

// hitta alla php-filer $files = glob("*.php"); print_r($filer); /* kommer att mata ut: Array ( => phptest.php => pi.php => post_output.php => test.php) */

För att hitta filer av flera typer måste du skriva så här:

// hitta alla php- och txt-filer $files = glob("*.(php,txt)", GLOB_BRACE); print_r($filer); /* output: Array ( => phptest.php => pi.php => post_output.php => test.php => log.txt => test.txt) */

Du kan också ange sökvägen i mallen:

$filer = glob("../images/a*.jpg"); print_r($filer); /* output: Array ( => ../images/apple.jpg => ../images/art.jpg) */

För att få den fullständiga sökvägen till ett dokument, använd realpath()-metoden:

$filer = glob("../images/a*.jpg"); // Använd "realpath"-funktionen på varje arrayelement $files = array_map("realpath",$files); print_r($filer); /* kommer att mata ut: Array ( => C:\wamp\www\images\apple.jpg => C:\wamp\www\images\art.jpg) */

3. Information om använt minne

Om du håller reda på hur mycket minne som förbrukas av dina skript kommer du förmodligen att optimera dem oftare.

I PHP finns det kraftfullt verktyg spårning av minnesanvändning. Belastningarna kan vara olika i olika delar av skriptet. För att få in det använda minnesvärdet det här ögonblicket, bör vi använda metoden memory_get_usage() . För fixering maximal kvantitet använt minne använd memory_get_peak_usage()

Echo "Initial: ".memory_get_usage()." bytes \n"; /* Initial: 361400 byte */ // ge en liten belastning för ($i = 0; $i< 100000; $i++) { $array = md5($i); } // и ещё for ($i = 0; $i < 100000; $i++) { unset($array[$i]); } echo "Final: ".memory_get_usage()." bytes \n"; /* Final: 885912 bytes */ echo "Peak: ".memory_get_peak_usage()." bytes \n"; /* Peak: 13687072 bytes */

4. Processorinformation

För att göra detta måste du använda metoden getrusage(). Men kom ihåg att den här funktionen inte fungerar på Windows.

Print_r(getrusage()); /* skriver ut Array ( => 0 => 0 => 2 => 3 => 12692 => 764 => 3864 => 94 => 0 => 1 => 67 => 4 => 0 => 0 => 0 => 6269 => 0) */

Bilden ovan kommer att vara tydlig för dem som har erfarenhet av systemadministration. För alla andra erbjuder vi en utskrift:

  • ru_oublock: antal blockskrivningsoperationer
  • ru_inblock: antal blockläsoperationer
  • ru_msgsnd: antal skickade meddelanden
  • ru_msgrcv: antal mottagna meddelanden
  • ru_maxrss: maximal storlek nonpaged uppsättning
  • ru_ixrss: total mängd delat minne
  • ru_idrss: total volym odelad data
  • ru_minflt: antal minnessidor som används
  • ru_majflt: antal fel på sidan som saknas
  • ru_nsignaler: antal mottagna signaler
  • ru_nvcsw: antal kontextväxlar av processen
  • ru_nivcsw: antal tvingade sammanhangsväxlar
  • ru_nswap: antal diskåtkomster vid personsökning
  • ru_utime.tv_usec: drifttid i användarläge (mikrosekunder)
  • ru_utime.tv_sec: drifttid i användarläge (sekunder)
  • ru_stime.tv_usec: drifttid i privilegierat läge (mikrosekunder)
  • ru_stime.tv_sec: drifttid i privilegierat läge (sekunder)

För att ta reda på vilka resurser i din processor som används av skriptet behöver du värdet på "användartid" (användartid) och "systemtid" (tid för privilegierat läge). Du kan få resultatet på både sekunder och mikrosekunder. För att förvandla det totala antalet sekunder till decimal nummer, måste du dividera värdet av mikrosekunder med 1 miljon och lägga till värdet av sekunder.

Det är lite förvirrande. Här är ett exempel:

// vila i 3 sekunder sömn(3); $data = getrusage(); echo "Användartid: ". ($data["ru_utime.tv_sec"] + $data["ru_utime.tv_usec"] / 1000000); echo "Systemtid: ". ($data["ru_stime.tv_sec"] + $data["ru_stime.tv_usec"] / 1000000); /* skriver ut Användartid: 0,011552 Systemtid: 0 */

Även om skriptet tog cirka 3 sekunder att köra, var processorn inte hårt belastad. Faktum är att när skriptet anropas (sleep), förbrukar det praktiskt taget inga processorresurser. I allmänhet finns det många uppgifter som tar en betydande tid, men som inte använder processorn. Till exempel att vänta på diskrelaterade operationer. Så du använder inte alltid CPU-tid i dina skript.

Här är ett annat exempel:

// gå 10 miljoner gånger för($i=0;$i<10000000;$i++) { } $data = getrusage(); echo "User time: ". ($data["ru_utime.tv_sec"] + $data["ru_utime.tv_usec"] / 1000000); echo "System time: ". ($data["ru_stime.tv_sec"] + $data["ru_stime.tv_usec"] / 1000000); /* выводит User time: 1.424592 System time: 0.004204 */

Skriptet tog 1,4 sekunders CPU-tid. I det här fallet är systemanropstiderna i allmänhet låga.

Privileged mode time (System Time) är den tid som processorn ägnar åt att exekvera systemförfrågningar till kärnan på uppdrag av programmet. Exempel:

$start = mikrotid(true); // ring microtime var tredje sekund while(microtime(true) - $start< 3) { } $data = getrusage(); echo "User time: ". ($data["ru_utime.tv_sec"] + $data["ru_utime.tv_usec"] / 1000000); echo "System time: ". ($data["ru_stime.tv_sec"] + $data["ru_stime.tv_usec"] / 1000000); /* выводит User time: 1.088171 System time: 1.675315 */

Nu har systemtiden gått åt mycket mer än i föregående exempel. Allt tack vare microtime()-metoden, som använder systemresurser.

Det bör dock noteras att den visade tiden kanske inte är korrekt pga Vid en given tidpunkt används även processorresurser av andra program, vilket kan resultera i ett litet fel.

5. Magiska konstanter

Det finns många magiska konstanter i PHP, som det aktuella radnumret (__LINE__), filsökväg (__FILE__), katalogsökväg (__DIR__), funktionsnamn (__FUNCTION__), klassnamn (__CLASS__), metodnamn (__METHOD__) och namnrymder ( __NAMESPACE__).

Vi kommer inte att överväga dem alla. Låt oss bara titta på ett par:

// detta skript beror på den aktuella filplatsen och // kan orsaka problem om det används från olika kataloger require_once("config/database.php"); // detta skript kommer inte att orsaka problem require_once(dirname(__FILE__) . "/config/database.php");

Använd __LINE__ när du felsöker skript:

// code // ... my_debug("något felsökningsmeddelande", __LINE__); /* kommer att visa rad 4: något felsökningsmeddelande */ // mer kod // ... my_debug("ett annat felsökningsmeddelande", __LINE__); /* kommer att skriva ut rad 11: ytterligare ett felsökningsmeddelande */ function my_debug($msg, $line) ( echo "Line $line: $msg\n"; )

6. Skapa unika ID:n

Det finns tillfällen då du behöver skapa en unik sträng. Jag har sett många gånger att md5()-funktionen används för att lösa detta problem:

// generera ett slumpmässigt strängeko md5(tid() . mt_rand(1.1000000));

Men i själva verket har PHP en speciell funktion uniqid() för dessa ändamål

// generera en slumpmässig sträng echo uniqid(); /* kommer att skriva ut 4bd67c947233e */ // en gång till echo uniqid(); /* kommer att skriva ut 4bd67c9472340 */

Med blotta ögat kan du se att de första symbolerna milt uttryckt är lika... Detta beror på att denna metod använder servertid för att generera symboler. Detta är till och med användbart eftersom... Alla genererade värden erhålls i alfabetisk ordning, vilket gör det möjligt att snabbt sortera dem.

För att minska chanserna att få en dubblett kan vi lägga till ett prefix eller använda en andra parameter (ökar antalet tecken):

// med prefixet echo uniqid("foo_"); /* kommer att skriva ut foo_4bd67d6cd8b8f */ // med den andra parametern echo uniqid("",true); /* kommer att skriva ut 4bd67d6cd8b926.12135106 */ // båda echo uniqid("bar_",true); /* kommer att mata ut bar_4bd67da367b650.43684647 */

Denna metod genererar strängar som är mindre än md5, vilket sparar utrymme.

7. Serialisering

Har du någonsin behövt lagra komplexa data i en databas eller fil? För att konvertera ett objekt till en sträng tillhandahåller PHP en speciell funktion.

Generellt sett finns det två av dessa metoder: serialize() och unserialize()

// komplex array $myvar = array("hej", 42, array(1,"två"), "apple"); // konvertera till sträng $string = serialize($myvar); echo $sträng; /* kommer att skriva ut a:4:(i:0;s:5:"hej";i:1;i:42;i:2;a:2:(i:0;i:1;i:1; s :3:"två";)i:3;s:5:"äpple";) */ // få det ursprungliga värdet $newvar = unserialize($string); print_r($newvar); /* kommer att mata ut Array ( => hej => 42 => Array ( => 1 => två) => apple) */

Så här fungerar dessa funktioner. Men på grund av den snabba tillväxten i popularitet för JSON lades två metoder json_encode() och json_decode() till PHP 5.2. Deras arbete liknar serialize():

// komplex array $myvar = array("hej", 42, array(1,"två"), "apple"); // konvertera till sträng $string = json_encode($myvar); echo $sträng; /* kommer att skriva ut ["hej",42,,"apple"] */ // återställer det ursprungliga värdet $newvar = json_decode($string); print_r($newvar); /* skriver ut Array ( => hej => 42 => Array ( => 1 => två) => apple) */

Det här alternativet är mer kompakt och kompatibelt med andra språk som JavaScript. Men när man arbetar med mycket komplexa objekt kan dataförlust inträffa.

8. Strängkompression

När vi pratar om kompression är det som omedelbart kommer att tänka på arkivfiler i ZIP-format. PHP tillhandahåller komprimeringsfunktioner långa linjer utan några filer.

I följande exempel Låt oss visa hur funktionerna gzcompress() och gzuncompress() fungerar:

$string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ut elit id mi ultricies adipiscing. Nulla facilisi. Praesent pulvinar, sapien vel feugiat vestibulum, nulla dui pretium orci, non ultricies elitum do lacusem iset , consectetur adipiscing elit. $compressed = gzcompress($string); echo "Originalstorlek: ". strlen($string)."\n"; /* kommer att mata ut Originalstorlek: 800 */ echo "Komprimerad storlek: ". strlen($komprimerad)."\n"; /* kommer att mata ut komprimerad storlek: 418 */ // return $original = gzuncompress($compressed);

Vi kan minska textvolymen med 50 %. För samma ändamål kan du använda metoderna gzencode() och gzdecode(), som använder en annan komprimeringsalgoritm.

9. Utför innan du avslutar

PHP har en register_shutdown_function() funktion som gör att du kan köra lite kod innan du stänger av skriptet.

Låt oss säga att du vill ta reda på lite information... Skripts körtid:

// få starttiden $start_time = microtime(true); // vissa operationer // ... // visar körtidens eko "exekvering tog: ". (microtime(true) - $start_time). "sekunder.";

Vid första anblick kan det tyckas trivial uppgift. För dessa ändamål kan du placera koden i slutet av filen. Men om exit()-funktionen aktiveras någonstans innan detta kommer den här koden aldrig att fungera. Det kommer inte heller att fungera om det finns ett fel på sidan eller om användaren avbryter sidans laddning (genom att klicka på motsvarande knapp i sin webbläsare);

När du använder metoden register_shutdown_function() kommer koden att exekveras i alla fall:

$start_time = microtime(true); register_shutdown_function("min_avstängning"); function my_shutdown() ( global $start_time; echo "exekveringen tog: ". (microtime(true) - $start_time). " sekunder."; )

Slutsats

PHP är en hel planet som aldrig slutar att förvåna oss med sitt innehåll. Vad tycker du om dessa funktioner?

Detta material är en fri översättning av artikeln:
Ire Aderinokun DELA IN INNEHÅLL I HTML5 - DIV ELLER AVSNITT ELLER ARTIKEL?

HTML5 har blivit en viktig språngbräda för begreppet semantisk kod. Han förespråkar att ett dokument ska vara strukturerat och att taggarna man använder ska förmedla mening.

Bland annat taggar

Och
infördes för att göra innehållsområden mer meningsfulla än bara
. Men i vilket fall ska vi använda dessa nya element och när det vanliga
bättre?

Elementöversikt

DIV

Element

är ett element för allmänt ändamål. Men det är inte så vettigt. Dess syfte är att gruppera innehåll som inte är semantiskt relaterat. I själva verket är detta helt meningslöst för skärmläsare, så du måste använda den här metoden med försiktighet.

Element

Används främst för innehållsgruppering och positionering med CSS. Till exempel som en behållare för andra element.

SEKTION

Element

är lite mer specifik än elementet
. Det gäller ett allmänt avsnitt av innehåll som kan grupperas semantiskt.

Huvudregeln är att avsnittselementet endast är lämpligt när dess innehåll uttryckligen kan grupperas.

Eftersom innehållet i taggen

är bara vettigt när det är grupperat, det måste ha ett "tema". "Ämnet" bör definieras genom att inkludera en titel i innehållet, ofta direkt efter den inledande taggen.

Prenumerera på nyhetsbrevet


ARTIKEL

Märka

är ännu mer specifik än taggen
. Det gäller även för en semantiskt relaterad del av innehållet och måste ha en titel. Innehållet måste dock vara fristående. Detta innebär att när den är isolerad från resten av sidan bör den fortfarande vara vettig.

Tagga syfte

i innehållstaggning, till exempel blogguppmärkning.


Artikelrubrik



Liknande i genere etiam humano apparet. Est, ut dicis, inquam...


DIV eller SEKTION eller ARTIKEL?

Så vilken tagg ska du använda när?

Om innehållet inte är semantiskt relaterat bör du använda

. Om semantiskt relaterat innehåll kan stå ensamt, använd taggen
. Använd annars
.

Att kombinera element

Låt oss försöka kombinera de olika elementen tillsammans.

Artikel i artikel

Artikelelement kan kapslas inuti varandra. Och även om de fortfarande är självförsörjande, antas det att innehållet i den interna

kopplat till det externa.

Artikelrubrik

John Smith

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

En annan artikel

okänd kvinna

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Lorem ipsum dolor sit amet, consectetur adipiscing elit.


Artikel i avsnitt

Vi kan också använda flera taggar

plats inuti
. Ett bra exempel skulle vara en bloggsida som visar de senaste inläggen. Behållaren för alla senaste inlägg kommer att vara en tagg
, medan varje enskild del av en inspelning kan markeras med en tagg
.

Senaste blogginläggen

Blogginläggets titel

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Blogginläggets titel

Lorem ipsum dolor sit amet, consectetur adipiscing elit.


Avsnitt i artikel

Varje enskild tagg

kan innehålla ett avsnitt. Till exempel kan det här inlägget markeras så här:


Dela innehåll i HTML5 - div eller avsnitt eller artikel?


Översikt över elementen



div


div-elementet är det mest allmänna syftet.




Från den här artikeln kommer du att lära dig hur man bygger en brödsmulakedja genom att bara känna till den symboliska koden för avsnittet.

Hur man bygger brödsmulor med hjälp av den symboliska koden för ett avsnitt i Bitrix

Innan du läser den här artikeln råder jag dig att läsa Hur man lägger till en titel till brödsmulor. Har du läst den? Låt oss sedan gå vidare.

I äldre komponenter fanns det fall där endast den symboliska koden för en sektion lagrades i arrayen. Denna variabel kallades .

Om de symboliska koderna för sektioner på din webbplats är unika (vilket alltid rekommenderas att ställas in i infoblockinställningarna), kommer det inte att vara några problem. Hitta först filen avsnitt.php din komponent.

$rsSect = CIBlockSection::GetList(array(), array("IBLOCK_ID" => $arParams["IBLOCK_ID"], "=CODE" => $arResult["VARIABLES"]["SECTION_CODE"]), false, array ("ID", "NAME", "UF_TEXT_TOP", "DEPTH_LEVEL", "SECTION_PAGE_URL")); if ($arSect = $rsSect->GetNext()) ( $SEC_LVL = $arSect["DEPTH_LEVEL"]; $SEC_NAME = $arSect["NAME"]; $SEC_URL = $arSect["SECTION_PAGE_URL"]; )

Var uppmärksam på linjen ‘=CODE’ => $arResult[‘VARIABLER’][‘SECTION_CODE’]. Även vi använd om istället för det vanliga medan loop, därför att vi behöver bara data för en partition.

Vi skriver ner 3 variabler som vi behöver:
— häckningsgrad, DEPTH_LEVEL
- Namn, NAMN
- länk till avsnittet, SECTION_PAGE_URL

VIKTIG. Innan nästa etapp Stäng av i din komponent, inställningen "lägg till avsnitt\infoblock till navigationskedjan".

I slutet av filen section.php lägger du till koden:

= 2) ( $rsSect = CIBlockSection::GetList(array(), array("IBLOCK_ID" => $arParams["IBLOCK_ID"), "=CODE" => $arResult["VARIABLES"]["SECTION_CODE"]) , false, array("ID", "NAME", "SECTION_PAGE_URL")); while ($arSect2 = $rsSect->GetNext()) (if (strstr($curSectionURL, $arSect2["SECTION_PAGE_URL"])) ( $SEC_NAME = $arSect2["NAME"]; $SEC_URL = $arSect2["SECTION_PAGE_URL"); , array("ID", "NAME")); $c = 0; while($sectionItem = $ibsTreeResource->Fetch())( $result[$c]["NAME"] = $sectionItem["NAME" ]; $res = CIBlockSection::GetByID($sectionItem["ID"] if($ar_res = $res->GetNext()) ( $url = $ar_res["SECTION_PAGE_URL"]; ) $result[$c ]["URL"] = $url; $c++; ) foreach ($result som $arItem) ( $APPLICATION->AddChainItem($arItem["NAME"], $arItem["URL"]); ) else ( $APPLICATION->AddChainItem($SEC_NAME, $SEC_URL) ?>

Med hjälp CIBlockSection::GetNavChain bygg hela sökvägen till den överordnade sektionen (om det är en undersektion) och lägg till den genom en loop till navigeringskedjan Titel och länk. Om detta också är en sektion på första nivån, lägg bara till den Titel och länk.

Till exempel är vår kod armstrong. Resultatet ser ungefär ut så här:
Katalog / Kontor Led-lampor / Armstrong lampor

URL:en ser då ut så här:

/catalog/ofisnye-svetilniki/armstrong/

Länken till katalogen tillhandahålls automatiskt.
Office LED-lampor är huvudsektionen.
Armstrong lampor är den sektion vi befinner oss i nu. Brödsmulskomponenten länkar inte till den.

Det var allt, jag hoppas att allt löste sig för dig :). PS-koden är inte perfekt och användes för gamla projekt, den kan förbättras.

Minimera kodduplicering genom bättre organisation Och återanvändningär ett viktigt mål för objektorienterad programmering. Men i PHP Ibland blir saker knepiga - på grund av begränsningarna för den enstaka arvsmodellen du använder kan du ha några metoder som du skulle vilja använda över flera klasser, men de kanske inte passar in i arvshierarkin.

Språk som C++ Och Pytonorm, tillåta oss att ärva från flera klasser, som till viss del löser detta problem, och mixins i Ruby låter dig blanda funktionaliteten för en eller flera klasser utan att använda arv. Men multipelt arv har sina problem.

I den här artikeln kommer jag att prata om egenskaper i php- ny funktionalitet införd i PHP 5.4 att lösa sådana problem. Begreppet egenskaper i sig är inget nytt för programmering och används på andra språk som t.ex Scala Och Perl. De tillåter oss att återanvända kod genom oberoende klasser i olika hierarkier.

Vad representerar egenskapen?

En egenskap är som en abstrakt klass som inte kan instansieras på egen hand (även om den oftare jämförs med ett gränssnitt). Dokumentation PHP definierar egenskaper enligt följande:

Egenskaper är en mekanism för kodåteranvändning på enskilda språk som PHP. Egenskapen är avsedd att övervinna några av begränsningarna med enstaka arv, vilket gör det möjligt för utvecklaren att fritt använda flera metoder i flera oberoende klasser placerade i olika hierarkier.

Låt oss titta på ett exempel:

Klass DbReader utökar Mysqli()

Class FileReader utökar SplFileObject()

Allt kommer att vara bra tills vi behöver använda gemensamma funktioner för dessa klasser. Naturligtvis kan vi skriva samma kod två gånger, men det är inte på något sätt en bra praxis.

Låt oss säga att båda klasserna ska vara singlar. Eftersom den PHP inte stöder flera arv, kommer varje klass att behöva implementera den nödvändiga koden för att stödja Singleton mall. Egenskaper erbjuder en lösning på just denna typ av problem.

Egenskap Singleton
{
privat statisk $instans;

Offentlig statisk funktion getInstance() (
if (!(self::$instance instans av Singleton)) (
self::$instance = nytt jag;
}
returnera self::$instance;
}
}

Klass DbReader utökar ArrayObject
{
använd Singleton;
}

Klass FileReader
{
använd Singleton;
}

Egenskap Singleton innehåller genomförandet Singleton mall med statisk metod getInstance(), som skapar ett klassobjekt med denna egenskap (om det inte redan är skapat) och returnerar det.

Låt oss försöka skapa objekt av dessa klasser med metoden getInstance().

$a = DbReader::getInstance();
$b = FileReader::getInstance();

Var_dump($a); //objekt(DbReader)
var_dump($b); //object(FileReader)

Vi kan se det $aär ett föremål DbReader, A $bär ett föremål FileReader, men båda beter sig nu som mallimplementerande objekt Singleton. Metod från klass Singleton introducerades i klasser som använder hans egenskap.

Egenskaper ålägger inte klassen någon ytterligare semantik. På vissa sätt kan du tänka på detta som en kopierings- och klistramekanism på nivå PHP-tolk , där metoderna för denna egenskap kopieras till layoutklassen.

Om vi ​​bara utökar klassen DbReader från förälder med dold egendom $instans, kommer fastigheten inte att synas i soptippen ReflectionClass::export().

Använda flera egenskaper

Hittills har vi bara använt en egenskap, men i vissa fall kan vi behöva inkludera funktionaliteten för mer än en egenskap i en klass.

Egenskap Hej
{
funktion säga hej() (
echo "Hej";
}
}

Egenskapsvärld
{
funktion sayWorld() (
eko "Världen";
}
}

Klass MyWorld
{
använd Hello, World;
}

$world = new MyWorld();
echo $world->sayHello() . " " . $world->sayWorld(); //Hej världen

Här har vi två egenskaper: "Hej" och "Fred". Egenskap Hej kan bara säga "Hej" och egenskap Värld kan säga "Fred". På lektionen Min värld vi ansökte Hallå Och Värld att protestera Min värld fick metoder från båda egenskaperna och kunde säga "Hello World".

I en av följande artiklar kommer vi att fortsätta att diskutera egenskaper. Och det var allt för idag. Tack för din uppmärksamhet!







2024 gtavrl.ru.