Aktív témák
-
faster
nagyúr
Nem fatális hiba, csak tök fölösleges egy változót idézőjelek közé tenni. Idézőjelek közés sima stringkonstanst rakunk.
$alfa = ''izé'';
Ez egy string konstans : ''izé''
Ez egy string változó: $alfa
Ez egy példa változónév használatára idézőjelek között:
''Ebbe a stringkonstansba most behelyettesítjük alfa nevű változó értékét: $alfa''
tehát a mail függyvény esetében:
mail(''valaki@valaki.com'',$subject,$body,$headers); -
faster
nagyúr
válasz
paramparya #2822 üzenetére
Használd a html kódját: ®
-
faster
nagyúr
Ugorj az sql részhez, ezekben a könyvekben nem lehet lineárisan haladni, pláne, ha mondjuk olyan fejezetek vannak közben, mint pl. fájlkezelés, amire nekem nagyon ritkán van szükségem, adatbázisművelet sokkal gyakrabban fordul elő a programjaimban.
Konkrét könyvet most nem tudok fejből mondani, a PHP könyvek nem tudom, milyen mélységben foglalkoznak az SQL-lel. Bonyolultabb SQL programozást csak adatbázisokkal foglalkozó könyvekből lehet tanulni.
[Szerkesztve] -
faster
nagyúr
Ehhez az sql-t kicsit jobban kell ismerni az alapokhoz képest, de mindenképp így célszerű, és gyorsan, egyszerűbb így a kód. Akkor van szükség a tömbre, ha olyan bonyolult műveletet akarsz elvégezni a rekordok között, amire sql nyelvben nincs meg a lehetőség, egyszerűbb statisztikák esetében (COUNT, SUM, MAX, MIN, AVG) nem éri meg.
Két kiegészítés a programhoz:
1. Ha a statusz mező INT típusú, akkor a wher feltételben így kell használni: WHERE statusz=0, idézőjelek nélkül. Mysql-nél nem számít, de más adatbázisszervereknél igen, és jobb, ha úgy szokod meg.
2. Ilyen lekérdezéseknél, amikor egy rekordot egy asszociatív tömbbe töltesz ($sor), és a mezőket név szerint éred el, elég a mysql_fetch_assoc, nem kell a mysql_fetch_array. mysql_fetch_array esetén az adatmező elérhető név ($sor[''id_termek'']), és sorszám szerint is ($sor[0]).
[Szerkesztve] -
faster
nagyúr
$parancs=''SELECT id_termek,SUM(db) AS darab FROM rendelesek WHERE statusz='0' GROUP BY id_termek '';
$eredmeny=mysql_query($parancs);
while ($sor = mysql_fetch_array($eredmeny)){
// $sor[''is_termek''] -> itt a termékazonosító
// $sor[''darab''] -> itt az összdarabszám, amit megrendeltek.
}
Szerk: k**** szmájlik.
[Szerkesztve] -
faster
nagyúr
Jól értem egyáltalán a problémát? Van egy ciklus, minden egyes lefutásakor $termek tartalmazza a termékazonosítót, $db a darabszámot. Egy termék többször is felbukkanhat a ciklus futása során. A cél az, hogy ebből felépítsünk egy asszociatív tömböt, ami a termékazonosítóval indexelve tartalmazza az összdarabszámot.
Akkor a
$tomb[$termek] += $db;
a megoldás, kiegészítve a te általad írt warningról (nálam nem warningol a PHP erre), illetve az emiatti feltételvizsgálatról. -
faster
nagyúr
válasz
sanyixXx #2723 üzenetére
echo -nál alapabb nincs a PHP-ben. Ugyanaz, mint a print, kiírás a kimenetre, webre ez nemhogy az első, hanem a nulladik fejezet.
A feltételvizsgálat megint csak szükséges ehhez a feladahot. Meg kell vizsgálni, hogy két változó megfelel-e bizonyos feltételnek, és ennek megfelelő utasítást végrehajtani, ehhez az if kell. -
faster
nagyúr
Rakd bele a megengedett értékeket egy tömbbe.
$lista = array(1,2,3,28,33);
if(in_array($x,$lista)) {
// benne van
}
Esetleg, ha lehet, definiálj konstansokat ezeknek az értékeknek.
define(LEJART,1);
define(MEGROMLOTT,2);
define(OSSZETORT,3);
define(EGER_MEGRAGTA,28);
define(ELLOPTAK,33);
$lista = array(LEJART,MEGROMLOTT,OSSZETORT,EGER_MEGRAGTA,ELLOPTAK);
if(in_array($x,$lista)) {
// benne van
}
[Szerkesztve] -
faster
nagyúr
válasz
paramparya #2553 üzenetére
Zseniális. Tökéletesen működik minden böngészőn, ami számít. Le a kalappal a készítője előtt.
-
faster
nagyúr
válasz
St1 Alxandr #2247 üzenetére
Saját szerveremen a web gyökérkönyvtár: d:\appserv\www\
Eleve hibás megközelítés, saját, és minden szerveren a webroot:
$_SERVER['DOCUMENT_ROOT'] -
faster
nagyúr
Az $_ENV tömbben szerintem sincs semmi adat a kliensről, csak a szerverről tartalmaz adatokat.
Nekem ez van benne:
Array
(
[ALLUSERSPROFILE] => C:\Documents and Settings\All Users
[CommonProgramFiles] => C:\Program Files\Common Files
[COMPUTERNAME] => OCSKAVAS
[ComSpec] => C:\WINDOWS\system32\cmd.exe
[FP_NO_HOST_CHECK] => NO
[NUMBER_OF_PROCESSORS] => 1
[OS] => Windows_NT
[Path] => C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\php\
[PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
[PROCESSOR_ARCHITECTURE] => x86
[PROCESSOR_IDENTIFIER] => x86 Family 15 Model 1 Stepping 3, GenuineIntel
[PROCESSOR_LEVEL] => 15
[PROCESSOR_REVISION] => 0103
[ProgramFiles] => C:\Program Files
[SystemDrive] => C:
[SystemRoot] => C:\WINDOWS
[TEMP] => C:\WINDOWS\TEMP
[TMP] => C:\WINDOWS\TEMP
[USERPROFILE] => C:\Documents and Settings\LocalService
[windir] => C:\WINDOWS
[AP_PARENT_PID] => 1140
) -
faster
nagyúr
válasz
paramparya #2223 üzenetére
Nagyon bejöhet neked az a bocifej, már egy ideje lehetne saját avatarod
Nem akarok saját avatart, ha lehetne, ''nincs semmi avatar'' beállítást használnék. -
faster
nagyúr
válasz
paramparya #2221 üzenetére
Adja be a jelentkezésést programtervező informatikus, vagy valami hasonló szakra, vagy okj-sre (bár azzal túl sokat nem ér )
Nem erről van szó, hanem arról, hogy ne akarjon kész, működő megoldást, amit nem is akar érteni sem, módosítani sem, hibát keresni benne nem hajlandó, csak írja meg valaki, oszt annyi. Nem is emiatt a konkrét eset miatt írtam ezt, csak valahogy egyre több ilyen bejegyzést látni a topikokban, és ezzel párhuzamosan csökken az én lelkesedésem, hogy segítsek. -
faster
nagyúr
válasz
Tele von Zsinór #2215 üzenetére
Igen, nem is ezzel van a gond, csak mostanában elszaporodtak a kész megoldást kérő hszek a programozástechnikaiakhoz képest. Na mindegy.
-
faster
nagyúr
válasz
Tele von Zsinór #2211 üzenetére
Aki egy mukkot sem ért a PHP programozáshoz, és nem is akar, az nem tudom, mit keres ebben a topikban.
Ez a topik elméletileg erről szól, nem pedig megoldásszállításról. -
faster
nagyúr
válasz
Tele von Zsinór #2163 üzenetére
nincs túl sok
Ebben semmi védelem nincs, ez egy régebbi oldalból kiszedett kódom, de ennél nagyobbakat nem akartam bemásolni, amiben még több fájl, még több programsor szerepel, és még összetettebb az egész. -
faster
nagyúr
login.php:
<?
header(''Cache-Control: no-store, no-cache, must-revalidate'');
header(''Content-Type: text/html; charset=iso8859-2'');
?>
<!DOCTYPE HTML PUBLIC ''-//W3C//DTD HTML 4.01 Transitional//EN''>
<html>
<head>
<title>Belépés</title>
<style>
* {
font:12px verdana;
}
.r {
color: red;
}
.s {
font-weight: bold;
}
</style>
</head>
<body>
<?if($_GET[''l''] == 1) echo ''<span class='r'>Helytelen név vagy jelszó!</span><br><br>'';?>
<span class=''s''>Belépés az adminisztrációs felületre:</span><br>
<form action=''auth.php''>
<input type=''hidden'' name=''login'' value=''login''>
<table>
<tr>
<td>Felhasználónév:</td><td><input type=''text'' size=''20'' name=''username'' value=''<?=$_REQUEST[''n'']?>'' style=''width: 150px''></td>
</tr>
<tr>
<td>Jelszó:</td><td><input type=''password'' size=''20'' name=''pass'' style=''width: 150px''></td>
</tr>
<tr>
<td colspan=''2''><input type=''submit'' value=''Belépés''></td>
</tr>
</table>
</form>
<script type=''text/javascript''>
<!--
document.forms[0].username.focus();
//-->
</script>
</body>
</html>
logout.php:
<?
session_start();
$_SESSION['auth'] = false;
header(''location:login.php'');
?> -
faster
nagyúr
válasz
marcias #2158 üzenetére
Bemásolok egy teljes kódot, ami elintézi az autentikálást, beléptetést, auth.php a neve, és csak be kell include-olni a programok elejébe:
<?
session_start();
require_once(''include.php'');
if($_REQUEST[''login'']) {
if($_REQUEST[''username'']) {
sql_connect();
$res = sql_query(''SELECT * FROM admin WHERE username='''.$_REQUEST[''username''].''' AND pass='''.$_REQUEST[''pass''].''''');
if(mysql_num_rows($res)) {
$row = mysql_fetch_array($res);
$_SESSION[''auth''] = true;
$_SESSION[''userid''] = $row[''id''];
$_SESSION[''username''] = $row[''username''];
$_SESSION[''supervisor''] = $row[''supervisor''];
header(''location: admin_muvek.php'');
exit;
}
else {
header(''location:login.php?l=1&n=''.rawurlencode($_REQUEST[''username'']));
exit;
}
}
else {
header(''location:login.php'');
exit;
}
}
if(!$_SESSION[''auth'']) {
header(''location:login.php?l=1'');
exit;
}
?> -
faster
nagyúr
válasz
marcias #2156 üzenetére
A programok elején azt mondod:
session_start();
Ezzel kapsz egy $_SESSION nevű tömböt, ami bármelyik oldalon is vagy, megőrzi a korábban kapott értékeket (a háttérben egyébként alaphelyzetben cookie-val + szerveroldali fájllal oldja ezt meg a session kezelő, de ez most nem érdekes.)
Ha a felhasználó begépelte a megfelelő username - password párost, és ekkor ezt végrehajtod:
$_SESSION['auth'] = true;
akkor minden oldalon, ahol vizsgálni akarod, autentikált felhasználóról van-e szó, vagy sem, elég megnézned a session_start() után, hogy a $_SESSION['auth'] be van-e állítva vagy sem.
Természetesen a $_SESSION tömbbe még sok egyéb adatot is berakhatsz. Tehát a védeni kívánt oldalak elejére elég ennyi:
<?
session_start();
if(!$_SESSION['auth'] {
header('location: login.php');
exit;
}
...
?>
A session_registert felejtsd el szerintem.
[Szerkesztve] -
faster
nagyúr
válasz
burgatshow #2144 üzenetére
Sokszor érdemesebb a mysql függvényeit használni, mint a php-s megfelelőjüket. Különösen akor, ha sok rekordról van szó, a COUNT, MAX, AVG sokszorosan gyorsabb, és ráadásul egyetlen egy értéket ad csak át a phpnak, szemben, azzal, amikor sok-sok rekordot adsz át, és aztán PHP-ben számolod ki az eredményt.
-
faster
nagyúr
válasz
burgatshow #2140 üzenetére
Egyébként ezt is le lehet írni egy sorba:
list($sum) = mysql_fetch_row(mysql_query('SELECT COUNT(*) FROM users WHERE username='''.$username.''' AND password='''.$password.'''')); -
faster
nagyúr
válasz
burgatshow #2135 üzenetére
Query eredményét fetchelni kell, anélkül csak egy resource ID számot kapsz.
Egyébként ennél a példánál a mysql_num_rows is teljesen jó megoldás.
[Szerkesztve] -
faster
nagyúr
Ja, hogy hibakezelésre...
Leírom a legegyszerűbb módszeremet:
Van egy sql_query függvényem.
function sql_query($query) {
$res = mysql_query($query);
if(mysql_errno()) error_report($query.''<br><b>''.mysql_error().''</b>'');
return $res;
}
És van egy error_report:
function error_report($str) {
$error_report = ''Error report from host:(''.$_SERVER[''HTTP_HOST''].''), script: ''.$_SERVER[''SCRIPT_NAME''].''\r\n\r\n'';
$error_report .= $str;
if(TEST_STATUS) print($str.''<br>'');
else mail(DEV_EMAIL,''Error report'',$str);
}
Ha a program elején, tipikusan egy ''config.php''-ban be van állítva, hogy
define(TEST_STATUS,true);
Akkor az error_report minden hibát a weboldalra ír ki. Ha viszont false-ra, akkor elküldi emailben a DEV_EMAIL-re, amit szintén define-nal állítok be. Tesztelés alatt kiíratom a hibát, éles site-oknál pedig a saját email címemre küldetem el a mysql (és egyéb) hibaüzeneteket.
[Szerkesztve] -
faster
nagyúr
válasz
burgatshow #2130 üzenetére
tbs leírta. Nagyméretű eredményeknél, pl ha arra vagy kíváncsi, összesen hány rekord van egy táblában a COUNT(*) a leggyorsabb és a legkevésbé processzorterhelő. Különösen az a COUNT(*) , ahol még WHERE szűrőfeltétel sincs, ez külön optimalizálva van mysql alatt, hogy a lehető leggyorsabban megkapd, összesen hány rekord van az adott táblában.
[Szerkesztve] -
faster
nagyúr
válasz
burgatshow #2123 üzenetére
Amúgy így szoktam számolni: @mysql_num_rows(@mysql_query(''select...''));
Eléggé nem jó módszer nagy tábláknál. -
faster
nagyúr
válasz
Tele von Zsinór #2118 üzenetére
A mysql_fetch_array alapból numerikus és asszociatív indexxel is kiszedi a mezőket, ha a második paraméter nincs megadva. Mivel opcionális paraméter, ezért általában nem is szokták megadni, de jelen példában ez nem lehet a hiba forrása.
-
faster
nagyúr
válasz
Tele von Zsinór #2027 üzenetére
-
faster
nagyúr
Mondtam, hogy aki notepadozik, az pro? Tudtommal nem. Nem kell kiforgatni a szavaimat.
Én mondtam, nem forgattam ki semmit. Te csak azt írtad, hogy nem érted, mire jó a normális editor. Én meg azt nem értem, mire jó a fapados.
Számomra a notepad az egyszerűséget és a könnyen kezelhetőséget testesíti meg és
nem hobbiprogramozásra használom.
Számomra a notepad nem testesít meg semmit. Még a sorokat sem számozza. És mivel notepadot emlegettél, csakis a notepadra reagálhattam, tök mindegy, hogy közben mire gondoltál. A vi-t, kwrite-ot nem ismerem.
[Szerkesztve] -
faster
nagyúr
Én meg azt nem értem, miért jó a mezítlábas, semmit nem tudó, tökhülye notepad, mint egy profi syntax highlightos editor, ami tud html attribútumlistát, tud css attribútumlistát, van neki image map editorja, tud több fájlban keresni, cserélni, akár egyenként is mutatva, hol mit cserél, akár regexppel is. Tud hostokat, projekteket kezelni, tud ftp szerveren in-place editálni, stb stb ...
A hobbi programozáson kívül a notepad nem jó semmire, komoly munkát nem lehet benne végezni.
Elnézést, ha sérül a lelked, de aki notepadozik, az nem pro, csak szeretne annak látszani.
[Szerkesztve] -
faster
nagyúr
válasz
Felhasznalo9 #1903 üzenetére
Az elehtseges, hogy az egesz html-t es Javascriptet php-bol generaljuk,
A PHP erre van kitalálva. -
faster
nagyúr
válasz
emitter #1870 üzenetére
IE-nél is úgy van, hogy XML-ben megírod a böngészőbe besimuló részt(pl. context-menüben saját opció), majd rákattintva egy JS-script hívódik meg?
Igen, hasonló, csak a context-menü bővítése nem XML-ből történik, hanem a registryben. Azt viszont nem tudom, hogy egy ilyen js-ből hogyan lehet pl. toolbart kezelni, mert a te scriptednek le kell gyártania egy listát a hszekből, és valahogy meg kell jeleítenie ezt. -
faster
nagyúr
válasz
emitter #1867 üzenetére
Én csak egy nagyon-nagyon egyszerű extensiont írtam IE alá, ami jobbgombra a kijelölt szövegrészt URL-ként megnyitotta új ablakban, szóval messze vagyok még attól, hogy egy ilyen összetettebb programot képes legyek elkészíteni.
Mindenesetre az én megoldásomhoz még nem kellett C++ programot csinálni, scriptben is meg lehetett oldani.
-
faster
nagyúr
válasz
emitter #1863 üzenetére
Szerintem erre egy IE vagy FF extensiont kell írni, ami beépül a böngészőbe, monitorozza ennek a cookienak a tartalmát ill. a változásait, kigyűjti a hszeket, és listaszerűen megjeleníti egy saját panelon. Sima böngészőbe letöltött javascript vagy netán szerver oldali PHP kód erre nem képes.
[Szerkesztve] -
-
faster
nagyúr
Hibakezelésre való, az már egy más dolog, hogy a Java-ban elég sok osztályfüggvény kivételt vált ki, ha valami nem tetszik neki, amit kezelni kell, vagy a program futása megszakad. Ilyen pl. az Integer osztály parseInt tagfüggvénye. Az 5-ös PHP is ismeri a try catch szerkezetet.
[Szerkesztve] -
faster
nagyúr
Par mondatban elregelned nekem a try...catch szerkezet mukodeset es felhasznalasi teruleteit?
Koszontem.
Strukturált kivételkezelésnek hívják, ha valami hiba történik a try blokkban, akkor a catch blokkban levő kivételkezelő kód fut le, de közben rájöttem, hogy hülyeséget írtam, ezt Java-ban kell így kezelni, mert javasciptben a parseInt NaN-t (speciális érték, Not A Number) ad vissza, ha nem tud int-re konvertálni, míg Java-ban kivételt dob.
[Szerkesztve] -
faster
nagyúr
válasz
vzsolo2225 #1730 üzenetére
Akkor viszont nem értem, hogy miért rossz az én megoldásom, mert a Locationos megoldást leszámítva nálam is így működik a rendszer!
Egyszerű az oka. Ha úgy include-olsz, hogy include(''http://akarmi.php?valami=5'');, akkor a session nem látszik a beinclude-olt fájlban, ha meg így include-olsz: include(''akarmi.php'');, akkor nem tudod url-ben átadni a ''valami'' nevű változót, hanem globális változót kell használnod. A http:// include -ot felejtsd el.
[Szerkesztve] -
faster
nagyúr
válasz
vzsolo2225 #1727 üzenetére
1. Az oldal elején megvizsgálod, hogy a delikvens be van-e léptetve, ha nincs, átirányítod a beléptető oldalra.
2. Vagy pedig az oldal kódja helyett a login formot dobod ki.
Tipikusan valahogy így:
<?
session_start();
if(!$_SESSION['auth') {
// kirakom a login formot, majd exit;
// vagy pedig header('Location:login.php');
}
// olda további részei
?>
Ha ez az autentikáció több oldalt is érint, mindkét módszer esetén célszerű ezt egy külön php fájlba tenni, pl. auth.php, és azoknál az oldalaknál, ahol szükség van rá, az oldal elején beinclude-olni.
Ha szükséged van konkrét példákra, akkor holnap előbányászok a programjaim közül egy ilyen autentikációs modult.
[Szerkesztve] -
faster
nagyúr
válasz
vzsolo2225 #1718 üzenetére
Ha sikeres volt a belépés és include(index.php)-val juttatom vissza az alap oldalra, akkor visszakerül, be is van lépve
Nem értem, miért include-dal ugrasz vissza az index.php oldalra. -
faster
nagyúr
válasz
vzsolo2225 #1712 üzenetére
include-nál vagy fájlnevet kell megadni, esetleg relatív vagy abszolute elérési úttal, vagy pedig egy url-t, és akkor csak egy virtuális include lesz az eredmény.
include(''index.php?valami=4'');
Ennél az a gond, hogy a fájl neve ''index.php'', nem pedig ''index.php?valami=4''. Ha az index.php egy $valami nevű változót vár, akkor azt előtte be kell állítani
$valami = 4;
include(''index.php'');
[Szerkesztve] -
faster
nagyúr
Leginkább az a hátrányuk, hogy lassítják az INSERT.., UPDATE, DELETE műveletek végrehajtását, ez weben annyira nem lényeges, mert weboldalnál tipikusan 2-3 nagyságrenddel több select van egy általános adattáblánál. Kivételek ez alól a letöltésszámláló-, és egyéb loggoló adatáblák.
-
faster
nagyúr
válasz
Flashback #1692 üzenetére
Arra gondoltam, hogy a szóhatár nemcsak a szóköz vagy a sortörés lehet, hanem a különféle írásjelek is. Egy karakter típusának meghatározásához a legpraktikusabbak a ctype függvények.
if(ctype_punct($kar) !== true and ctype_space($kar) !== true) { ... }
ctype_space($kar) true-val tér vissza, ha whitespace karakterről van szó, false-szal, ha nem. Whitespace karakterek közé tartozik a sortörés, a szóköz, de pl. a tabulátor is. A ctype_punct pedig ehhez hasonló, true-val tér vissza, ha nem alfanumerikus és nem whitespace karaktert kap paraméterként (tehát nem betű, hanem pl. vessző, pont vagy pl. felkiáltójel).
Részleteket itt találsz:
[link]
[Szerkesztve] -
faster
nagyúr
válasz
burgatshow #1690 üzenetére
Az első, amit meg jegyezned Java-ból:
public static void main -
faster
nagyúr
vagy egyáltalán ez szolgáltatófüggő e
Erre mérget vehetsz. Nálam egyszerűbb a dolog, nem ingyenes tárhelyekre csinálok programokat, és azokon általában fent van az imagemagick valamelyik verziója. Mondjuk én eddig még csak arra használtam, hogy átméretezzek vele képeket, tipikusan thumbnail gyártáshoz. -
faster
nagyúr
válasz
vakondka #1545 üzenetére
A tagváltozók elveszik a korábbi értéküket, ha újat kapnak, ebből a szempontból ugyanúgy viselkednek, mint a sima globális változók. Ennek a konkrét osztálynak az a hátránya, hogy minden egyes lekérdezéshez saját mysql kapcsolatot épít fel. Ezért szerencsésebb a kapcsolatot és a lekérdezést két külön objektumra szétszedni.
-
faster
nagyúr
válasz
vakondka #1541 üzenetére
Ez függ az adott osztálytól. Ha a négy lekérdezés eredményét párhuzamosan akarod kezelni, és az osztály csak egy lekérdezés ereményét tárolja el, akkor csinálni kell belőle 4 példányt. Ha viszont egymás után akarod feldolgozni a 4 queryt, akkor erre elég egy objektumpéldány, létrehozod, query, feldolgozod az eredményt, újabb query, újabb feldolgozás stb...
Ha több query, több eredmény (result set) van, de csak egy adatbázis kapcsolat, akkor érdemes szétválasztani pl. egy kapcsolat objektumra, egy resultset objektumra...sok dologtól függ, melyik modell kényelmesebb. -
faster
nagyúr
válasz
vakondka #1537 üzenetére
szóval a függvényeknek belül kell lenniük az osztályon, akkor mégis tanultam valamit egy nap alatt !
Így van, minden tulajdonság (tagváltozó, tagfüggvény) ami az adott osztályra vonatkozik, a class blokkon belül kell hogy legyen. A class egy sablon, ezen sablon alapján jön létre egy vagy több objektum. Ezt hívják egyébként példányosításnak. Alaphelyzetben a class alapján annyi objektumot hozol létre, amennyire csak szükséged van (van más viselkedésű osztály is, de az most lényegtelen)
Egy jól megírt osztálynak például olyan alapvető tulajdonságai kell, hogy legyenek, hogy pl. az osztályhoz tartozó adatokhoz csak az osztály saját függvényei férhetnek hozzá, külső programrész csak egy jól definiált interfészt lát az objektumból, a belső felépítéséről nem tud semmit, és közvetlenül nem is tud belenyúlni az osztály adataiba.
[Szerkesztve] -
faster
nagyúr
válasz
vakondka #1523 üzenetére
A fekete könyv nincs meg, nem tudom megmondani, mennyire jó az oop része, a másik megvan, de azt is olyan rég nem olvastam már, hogy meg nem tudom mondani, neked jó-e vagy sem. Úgy emlékszem, eléggé haladó szinten foglalkozik vele, úgyhogy kezdésnek nem épp a legmegfelelőbb.
A strukturális szemlélet az, hogy vannak a bemenőadatok, ezeket különféle műveletekkel addig alakítja a program, amíg szükség van rá, majd kiadja a kimenetre, vagy mondjuk eltárolja ezeket.
Az objektum orientált programozásnak a legfontosabb elve, hogy nem a funkciók felől közelíti meg a problémát, hanem az adatok, adatszerkezetk felől. Úgy közelíti meg a kérdést, hogy az adatokkal foglalkozik elsősorban, először azokat rendszerezi, az összetartozó adatok egymás mellé csoportosítja, majd definiálja, hogy ezeken az adatokon milyen műveleteket kell végrehajtani, ezeket funkciókba teszi, és ezt az egészet egy név alá rendelve azt mondja, ez egy objektum.
Most nincs időm példákat írni, majd talán legközelebb.
[Szerkesztve] -
faster
nagyúr
Az osztály csak egy sablon. Leírja azt, hogyha te létrehozol egy objektumot a new operátorral, annak milyen adatmezői lesznek, és milyen műveleteket lehet végrehajtani ezeken, ezek az objektum tagfüggvényei. A konstruktor az a tagfüggvény, ami az objektum létrehozásakor hajtódik végre, feladata az objektum kezdőállapotának létrehozása. A destruktor is speciális tagfüggvény, amely akkor lép működésbe, ha az objektumot a program megszünteti, pl. adatbázis kapcsolat lezárása, vagy egyéb takarító funkciók.
Aktív témák
Hirdetés
- BESZÁMÍTÁS! ASUS H87I-PLUS H87 chipset alaplap garanciával hibátlan működéssel
- Telefon felvásárlás!! iPhone 13 Mini/iPhone 13/iPhone 13 Pro/iPhone 13 Pro Max
- Telefon felvásárlás!! iPhone 12 Mini/iPhone 12/iPhone 12 Pro/iPhone 12 Pro Max
- LENOVO ThinkBook 13s - 13.3" FullHD IPS - i5-10210U - 8GB - 256GB SSD - Win11 - MAGYAR
- MSI CYBORG 15 A13V
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest